Авторизованный запрос get не работает в UWP

#c# #wpf #http #uwp

#c# #wpf #http #uwp

Вопрос:

Я создаю приложение UWP, которое получает данные из ASP.NET API Когда я пытаюсь сделать запрос, для которого требуется токен JWT, он завершается неудачей.

код запроса:

 public async Task<string> testAsync(string token)
        {
            token = token.Replace(""", "");

            var authenticationHeaderValue = new AuthenticationHeaderValue("Bearer", token);
            client.DefaultRequestHeaders.Authorization = authenticationHeaderValue;

            var json = await client.GetAsync("http://localhost:5000/api/TravelList");
            return json.Content.ReadAsStringAsync().Resu<
        }
 

клиент — это объект HttpClient, созданный следующим образом:

 client = new HttpClient(new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (a, b, c, d) => true
            });
 

Когда я запускаю этот код, я получаю:
System.Net.HttpStatusCode.InternalServerError

И мой серверный сервер регистрирует это:

An unhandled exception has occurred while executing the request. System.InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found.

Но когда я тестирую это в swagger, все работает нормально: swagger

Примечание: я использую HTTP вместо HTTPS в своем приложении UWP, поэтому я использую http://localhost:5000 /… вместо https://localhost:5001 /… но также это работает и на swagger.

Что я делаю не так?

Комментарии:

1. Похоже, вы используете класс System.Net.Http.HttpClient вместо класса Windows.Web.Http.HttpClient . Мы рекомендуем вам использовать класс Windows.Web.Http.HttpClient , поскольку на классы в System.Net.Http влияет функция сетевой изоляции. Пожалуйста, проверьте, объявили ли вы возможности частных сетей (клиент и сервер) и возможности Интернета (клиент и сервер) . Не могли бы вы сказать мне, пожалуйста, если вы включили петлю локальной сети ?

2. Я включил петлю локальной сети, и это сделало свое дело. Я думаю, потому что теперь я могу использовать запросы HTTPS? Также я пытался использовать Windows.Web.Client.Http.HttpClient подобным образом, но я продолжаю получать: не удалось найти имя типа или пространства имен «Windows» , но я полагаю, это потому, что мой HttpDataService находится в моей библиотеке project.core, а не в моем приложении UWP. Должен ли я изменить свою службу, чтобы она была в моем приложении? Спасибо за быстрый ответ! @YanGu-MSFT

3. Похоже, вы включили сетевой цикл, и это помогло решить вашу проблему. Тогда вам не нужно использовать класс Windows.Web.Http.HttpClient для замены исходного класса System.Net.Http.HttpClient, просто продолжайте использовать исходный класс System.Net.Http.HttpClient .