您好,登錄后才能下訂單哦!
本篇內容主要講解“怎樣在ASP.NET Core中使用HttpClientFactory”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎樣在ASP.NET Core中使用HttpClientFactory”吧!
ASP.NET 是開源,跨平臺,高性能,輕量級的 Web 應用構建框架,常用于通過 HTML、CSS、JavaScript 以及服務器腳本來構建網頁和網站。
可以用 HttpClientFactory 來集中化管理 HttpClient,工廠提供了對 HttpClient 的創建,配置和調度,值得一提的是:HttpClient 一直都是 Http 請求業務方面的一等公民。
HttpClient 雖好,但它有一些缺點:
創建太多的 HttpClient 是一種低效的行為,因為當一個新客戶端連接到遠程 Server 時,你的應用程序還需要承擔著重連遠程 Server 的開銷。
如果每一個 request 都創建一個 HttpClient,當應用程序負載過大, Socket 必將耗盡,比如默認情況下 HttpClient 會維持至少4分鐘的 Connection 連接。
所以推薦的做法是創建一個可供復用的共享式 HttpClient 實例,如果你要打破沙鍋問到低的話,即使是創建共享式的 HttpClient 也會有很多問題,比如它會無視 DNS 緩存生效,那怎么辦呢?可以用 .NET Core 2.1 引入的 HttpClientFactory 來解決此問題。。。用它來統一化的高效管理 HttpClient。
HttpClientFactory 有兩種使用方式。
NamedClient
TypedClient
所謂的 NamedClient 就是注冊帶有標記的 HttpClient 到 HttpClientFactory 工廠中,下面的代碼展示了一個名為 IDGCustomApi
的 HttpClient 的工廠注冊。
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddHttpClient("IDGCustomApi", client => { client.BaseAddress = new Uri("https://localhost:6045/"); client.DefaultRequestHeaders.Add("Accept", "application/json"); client.DefaultRequestHeaders.Add("User-Agent", "IDG"); }); services.AddControllers(); }
所謂的 TypedClient 就是注冊一個你自定義的 HttpClient,我想你肯定有點懵逼了,沒關系,我現在就來自定義 HttpClient, 然后通過 AddHttpClient() 注冊到容器中。
public class CustomHttpClient { public HttpClient Client { get; } public CustomHttpClient(HttpClient client) { Client = client; } } public class Startup { // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddHttpClient<CustomHttpClient>(client => client.BaseAddress = new Uri("https://localhost:6045/")); services.AddControllers(); } }
為了能夠在 Controller 中使用,可以將 IHttpClientFactory 通過構造函數方式進行注入,參考如下代碼:
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private IHttpClientFactory httpClientFactory; public WeatherForecastController(ILogger<WeatherForecastController> logger, IHttpClientFactory httpClientFactory) { this.httpClientFactory = httpClientFactory; } [HttpGet] public async Task<string> Get() { var httpClient = httpClientFactory.CreateClient("IDGCustomApi"); string html = await httpClient.GetStringAsync("http://bing.com"); return html; } }
從 IHttpClientFactory 的默認實現 DefaultHttpClientFactory 的源碼也可以看出,httpClient 所關聯的 HttpMessageHandler 和 Options 都被工廠跟蹤和管控。
internal class DefaultHttpClientFactory : IHttpClientFactory, IHttpMessageHandlerFactory { public HttpClient CreateClient(string name) { if (name == null) { throw new ArgumentNullException("name"); } HttpMessageHandler handler = CreateHandler(name); HttpClient httpClient = new HttpClient(handler, disposeHandler: false); HttpClientFactoryOptions httpClientFactoryOptions = _optionsMonitor.Get(name); for (int i = 0; i < httpClientFactoryOptions.HttpClientActions.Count; i++) { httpClientFactoryOptions.HttpClientActions[i](httpClient); } return httpClient; } public HttpMessageHandler CreateHandler(string name) { if (name == null) { throw new ArgumentNullException("name"); } ActiveHandlerTrackingEntry value = _activeHandlers.GetOrAdd(name, _entryFactory).Value; StartHandlerEntryTimer(value); return value.Handler; } }
譯文鏈接:https://www.infoworld.com/article/3276007/how-to-work-with-httpclientfactory-in-aspnet-core.html
到此,相信大家對“怎樣在ASP.NET Core中使用HttpClientFactory”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。