Far*_*raz 11 c# asp.net-core asp.net-core-2.0
我正在编写 ASP.Net MVC Core 2.2 Web App。我需要使用 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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jod*_*ell 26
注册HttpClient在ConfigureServices。
1a. 对于打字客户
services.AddHttpClient<ITypedClientService, TypedClientService>();
Run Code Online (Sandbox Code Playgroud)
1b. 对于指定客户
services.AddHttpClient("someClient", c =>
{
c.BaseAddress = new Uri("https://someaddress.com/");
});
Run Code Online (Sandbox Code Playgroud)
1c。对于基本用法
services.AddHttpClient();
Run Code Online (Sandbox Code Playgroud)将 注入HttpClient到您的控制器中。
[ApiController]
public class BotController : ControllerBase
{
...
Run Code Online (Sandbox Code Playgroud)
2a. 对于打字客户
public BotController(..., ITypedClientService httpClient, ...)
{
...
_httpClient = httpClient;
...
}
Run Code Online (Sandbox Code Playgroud)
2b. 对于指定客户
public BotController(..., IHttpClientFactory clientFactory, ...)
{
...
_httpClient = clientFactory.createClient("someClient");
...
}
Run Code Online (Sandbox Code Playgroud)
2c。对于基本用法
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);
...
}
Run Code Online (Sandbox Code Playgroud)不要HttpClient自己建造,新的就是胶水。让HttpClientFactory和框架管理生命周期和实例化。
请注意,使用基本用法,您将避免为定义的客户端配置策略的好处。
| 归档时间: |
|
| 查看次数: |
15680 次 |
| 最近记录: |