.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请求 。