.NET Core 2.1 HttpClient不返回预期值

我正在使用一个接口从这个URL调用api http:// localhost:55260 / api / Accounts / GetList

这是它引用的控制器:

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

但是,而不是返回的字符串,我得到这个:

在此处输入图像描述

这就是我声明我的httpclient /接口的方式:

 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> GetDataAsync() { List result = null; HttpResponseMessage response = await httpClient.GetAsync("/GetList"); if (response.IsSuccessStatusCode) { result = await response.Content.ReadAsAsync<List>(); } 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的教程? 另外,如何通过此发布数据?

您的界面定义了异步调用。 换句话说,“GetData”返回Task而不是实际值。

为了获得实际值,试试这个(编码自由手,所以没有调试)

 public async Task Index() { var result = await authenticationClient.GetData(); return View(result); } 

当我将控制器代码更改为时,我会这样做

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

修改GetDataAsync()

 HttpResponseMessage response = await httpClient.GetAsync("/api/Accounts/GetList"); 

ASP.NET Core 2.1包含一个新的IHttpClientFactory服务,可以更轻松地在应用程序中配置和使用HttpClient实例。 HttpClient已经具有委托处理程序的概念,这些处理程序可以链接在一起以用于传出HTTP请求。 工厂:

  • 使每个命名客户端的HttpClient实例的注册更加直观。
  • 实现Polly处理程序,允许Polly策略用于Retry,CircuitBreakers等。

有关更多信息,请参阅启动HTTP请求 。