可以透過HttpClient這個類別,在開發程式時針對欲訪問的URI,以HTTP方式傳送Request及接收Response。
HttpClient只需實體化一次,就可以發送多個請求,官方建議以static方式共用,不須使用using()來釋放連線。
static readonly HttpClient client = new HttpClient();
static async Task Main()
{
try
{
HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch(HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ",e.Message);
}
}
不過HttpClient只會在建立連線時解析DNS專案,無法即時反應DNS的異動,可以透過PooledConnectionIdleTimeout來限制連線的存活時間,以利重新解析DNS。
或是使用ASP.NET Core 2.1 / .NET 4.6 起推出的 HttpClientFactory,可藉由Connection Pool解決連線共用及DNS 異動的問題。
以下參考在 ASP.NET Core 中使用 IHttpClientFactory 發出 HTTP 要求的基本使用方法
版本:.NET Core 3.1
-
在
Startup.cs
裡註冊服務IHttpClientFactory
可以藉由呼叫AddHttpClient
來註冊:public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddHttpClient(); } }
-
在Class中透過相依性注入
IHttpClientFactory
public class BasicUsageModel : PageModel { private readonly IHttpClientFactory _clientFactory; public BasicUsageModel(IHttpClientFactory clientFactory) { _clientFactory = clientFactory; } }
-
使用CreateClient方法取得HttpClient執行個體
public async Task OnGet() { var request = new HttpRequestMessage(HttpMethod.Get, "https://api.github.com/repos/dotnet/AspNetCore.Docs/branches"); var client = _clientFactory.CreateClient(); var response = await client.SendAsync(request); }
🎯Reference
在 ASP.NET Core 中使用 IHttpClientFactory 發出 HTTP 要求
使用 HttpClientFactory 實作復原 HTTP 要求