我们如何在 ASP.Net Core 中使用 HttpClient?
How can we use HttpClient in ASP.Net Core?
我正在编写 ASP.Net MVC Core 2.2 Web 应用程序。我需要使用 HTTP 或 HTTPS 从另一个 Web 服务器获取数据。我应该怎么做?
我使用 HttpClient
.
编写代码
我有一个接收消息的控制器,它工作正常,但是,我应该构建 HttpClient
吗?
[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase
{
private readonly IHostingEnvironment _env;
private readonly ILogger _logger;
private readonly IUpdateService _updateService;
public MyController(
IHostingEnvironment env,
ILogger<MyController> logger,
IUpdateService updateService)
{
_env = env;
_logger = logger;
_updateService = updateService;
}
// POST api/values
[HttpPost]
public async Task<IAsyncResult> Post([FromBody]Update update)
{
using (HttpClient Client = new HttpClient())
{
HttpResponseMessage result = Client.GetAsync(uri).Result;
switch (result.StatusCode)
{
case HttpStatusCode.Accepted:
return true;
case HttpStatusCode.OK:
return true;
default:
return false;
}
}
}
}
在ConfigureServices
中注册HttpClient
。
1a。 typed clients
services.AddHttpClient<ITypedClientService, TypedClientService>();
1b。 named clients
services.AddHttpClient("someClient", c =>
{
c.BaseAddress = new Uri("https://someaddress.com/");
});
1c。 Basic usage
services.AddHttpClient();
将 HttpClient
注入您的控制器。
[ApiController]
public class BotController : ControllerBase
{
...
2a。 typed clients
public BotController(..., ITypedClientService httpClient, ...)
{
...
_httpClient = httpClient;
...
}
2b。 named clients
public BotController(..., IHttpClientFactory clientFactory, ...)
{
...
_httpClient = clientFactory.createClient("someClient");
...
}
2c。 Basic usage
IHttpClientFactory _clientFactory
public BotController(..., IHttpClientFactory clientFactory, ...)
{
...
_clientFactory = clientFactory;
...
}
[HttpPost]
public async Task<IActionResult> Post([FromBody]Update update)
{
...
var request = new HttpRequestMessage(
HttpMethod.Get,
"https://someaddress.com/api/resource");
request.Headers.Add("Accept", "application/vnd.github.v3+json");
request.Headers.Add("User-Agent", "YourApp");
var client = _clientFactory.createClient();
var response = await client.SendAsync(request);
...
}
不要自己构造HttpClient
,新的就是胶水。让 HttpClientFactory
和框架管理生命周期和实例化。
注,
使用基本用法,您可以避免为定义的客户端配置策略的好处。
我正在编写 ASP.Net MVC Core 2.2 Web 应用程序。我需要使用 HTTP 或 HTTPS 从另一个 Web 服务器获取数据。我应该怎么做?
我使用 HttpClient
.
我有一个接收消息的控制器,它工作正常,但是,我应该构建 HttpClient
吗?
[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase
{
private readonly IHostingEnvironment _env;
private readonly ILogger _logger;
private readonly IUpdateService _updateService;
public MyController(
IHostingEnvironment env,
ILogger<MyController> logger,
IUpdateService updateService)
{
_env = env;
_logger = logger;
_updateService = updateService;
}
// POST api/values
[HttpPost]
public async Task<IAsyncResult> Post([FromBody]Update update)
{
using (HttpClient Client = new HttpClient())
{
HttpResponseMessage result = Client.GetAsync(uri).Result;
switch (result.StatusCode)
{
case HttpStatusCode.Accepted:
return true;
case HttpStatusCode.OK:
return true;
default:
return false;
}
}
}
}
在
ConfigureServices
中注册HttpClient
。1a。 typed clients
services.AddHttpClient<ITypedClientService, TypedClientService>();
1b。 named clients
services.AddHttpClient("someClient", c => { c.BaseAddress = new Uri("https://someaddress.com/"); });
1c。 Basic usage
services.AddHttpClient();
将
HttpClient
注入您的控制器。[ApiController] public class BotController : ControllerBase { ...
2a。 typed clients
public BotController(..., ITypedClientService httpClient, ...) { ... _httpClient = httpClient; ... }
2b。 named clients
public BotController(..., IHttpClientFactory clientFactory, ...) { ... _httpClient = clientFactory.createClient("someClient"); ... }
2c。 Basic usage
IHttpClientFactory _clientFactory public BotController(..., IHttpClientFactory clientFactory, ...) { ... _clientFactory = clientFactory; ... } [HttpPost] public async Task<IActionResult> Post([FromBody]Update update) { ... var request = new HttpRequestMessage( HttpMethod.Get, "https://someaddress.com/api/resource"); request.Headers.Add("Accept", "application/vnd.github.v3+json"); request.Headers.Add("User-Agent", "YourApp"); var client = _clientFactory.createClient(); var response = await client.SendAsync(request); ... }
不要自己构造HttpClient
,新的就是胶水。让 HttpClientFactory
和框架管理生命周期和实例化。
注, 使用基本用法,您可以避免为定义的客户端配置策略的好处。