中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣在ASP.NET Core中使用HttpClientFactory

發布時間:2021-04-09 10:54:31 來源:億速云 閱讀:147 作者:啵贊 欄目:開發技術

本篇內容主要講解“怎樣在ASP.NET Core中使用HttpClientFactory”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎樣在ASP.NET Core中使用HttpClientFactory”吧!

ASP.NET 是什么

ASP.NET 是開源,跨平臺,高性能,輕量級的 Web 應用構建框架,常用于通過 HTML、CSS、JavaScript 以及服務器腳本來構建網頁和網站。

為什么要使用 HttpClientFactory

可以用 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

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

為了能夠在 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;
        }
    }

怎樣在ASP.NET Core中使用HttpClientFactory

從 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”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝阳县| 陕西省| 绥宁县| 肇东市| 无极县| 汽车| 新乡县| 镇康县| 怀宁县| 阳春市| 泽普县| 调兵山市| 电白县| 临湘市| 勐海县| 元阳县| 云龙县| 蓬溪县| 阿拉尔市| 广灵县| 白城市| 雷州市| 浮梁县| 固始县| 万载县| 大宁县| 福贡县| 渝中区| 内乡县| 石台县| 西藏| 柘城县| 本溪| 广丰县| 田阳县| 陇西县| 三河市| 汝州市| 环江| 苏尼特左旗| 茂名市|