.NET Core 2.1 HttpClient не возвращает ожидаемые значения - PullRequest
0 голосов
/ 11 октября 2018

Я использую интерфейс для вызова API из этого URL http://localhost:55260/api/Accounts/GetList

Это контроллер, на который он ссылается:

[HttpGet]
[Route("GetList")]
[AllowAnonymous]
public ActionResult<IEnumerable<string>> GetList()
{
    return new string[] { "value1", "value2" };
}

Однако вместо возвращаемых строк яя получаю это:

enter image description here

Вот как я заявляю мой httpclient / interface:

private readonly HttpClient httpClient;
public AuthenticationClient(HttpClient httpClient)
{
    httpClient.BaseAddress = new Uri("http://localhost:55260/api/Accounts");
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));
    this.httpClient = httpClient;
}

public async Task<IEnumerable<string>> GetDataAsync()
{
    List<string> result = null;
    HttpResponseMessage response = await httpClient.GetAsync("/GetList");
    if (response.IsSuccessStatusCode)
    {
        result = await response.Content.ReadAsAsync<List<string>>();
    }
    return result;
}

Я уже объявилэто в моем Startup.cs как services.AddHttpClient ();

Это то, как я называю интерфейс

private readonly IAuthenticationClient authenticationClient;
public HomeController(IAuthenticationClient authenticationClient)
{
    this.authenticationClient = authenticationClient;
}

public IActionResult Index()
{
    var result = authenticationClient.GetData();
    return View();
}

Я что-то пропустил или есть руководство по использованию HttpClients?Кроме того, как я могу разместить данные через это?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Я делаю это, когда меняю код контроллера на

public async Task<IActionResult> Index()
    {
        var result = await _authenticationClient.GetDataAsync();
        return View();
    }

Изменить GetDataAsync ()

HttpResponseMessage response = await httpClient.GetAsync("/api/Accounts/GetList");
0 голосов
/ 11 октября 2018

ASP.NET Core 2.1 включает новую службу IHttpClientFactory, которая упрощает настройку и использование экземпляров HttpClient в приложениях.HttpClient уже имеет концепцию делегирования обработчиков, которые могут быть связаны вместе для исходящих HTTP-запросов.Фабрика:

  • Делает регистрацию экземпляров HttpClient для каждого именованного клиента более интуитивно понятным.
  • Реализует обработчик Polly, который позволяет использовать политики Polly для Retry, CircuitBreakers и т. Д.

Для получения дополнительной информации см. Инициирование HTTP-запросов .

0 голосов
/ 11 октября 2018

ваш интерфейс определяет асинхронный вызов.другими словами, «GetData» возвращает Task<string> не то фактическое значение.

Чтобы получить действительные значения, попробуйте это (кодирование свободной рукой, поэтому не отлажено)

public async Task<IActionResult> Index()
{
    var result = await authenticationClient.GetData();
    return View(result);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...