<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        為HttpClient添加默認請求報頭的四種解決方案

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:34:27
        文檔

        為HttpClient添加默認請求報頭的四種解決方案

        為HttpClient添加默認請求報頭的四種解決方案:前言 HttpClient在Web調(diào)用中具有廣泛的應用,而為它添加默認請求頭是我們經(jīng)常遇到的需求,本文介紹4種為HttpClient添加默認請求頭的方式。下面話不多說了,來一起看看詳細的介紹吧 第一種方式 直接在創(chuàng)建的HttpClient對象的DefaultRequestHe
        推薦度:
        導讀為HttpClient添加默認請求報頭的四種解決方案:前言 HttpClient在Web調(diào)用中具有廣泛的應用,而為它添加默認請求頭是我們經(jīng)常遇到的需求,本文介紹4種為HttpClient添加默認請求頭的方式。下面話不多說了,來一起看看詳細的介紹吧 第一種方式 直接在創(chuàng)建的HttpClient對象的DefaultRequestHe

        前言

        HttpClient在Web調(diào)用中具有廣泛的應用,而為它添加默認請求頭是我們經(jīng)常遇到的需求,本文介紹4種為HttpClient添加默認請求頭的方式。下面話不多說了,來一起看看詳細的介紹吧

        第一種方式

        直接在創(chuàng)建的HttpClient對象的DefaultRequestHeaders集合中添加報頭。

        class Program
        {
         static Task Main()=> SendAsync1();
        
         private static async Task SendAsync1()
         {
         var httpClient = new HttpClient();
         AddDefaultHeaders(httpClient);
         await httpClient.GetStringAsync("http://localhost:5000/");
         }
        
         private static void AddDefaultHeaders(HttpClient httpClient)
         {
         httpClient.DefaultRequestHeaders.Add("x-www-foo", "123");
         httpClient.DefaultRequestHeaders.Add("x-www-bar", "456");
         httpClient.DefaultRequestHeaders.Add("x-www-baz", "789");
         }
        }

        第二種方式

        對于.NET Core應用來說,我們更推薦的做法是采用依賴注入的方式,利用IHttpClientFactory來創(chuàng)建HttpClient對象,那么我們在進行相關(guān)服務注冊的時候就可以設置默認請求報頭。

        class Program
        {
         static Task Main()=> SendAsync2();
        
         private static async Task SendAsync2()
         {
         var services = new ServiceCollection();
         services.AddHttpClient("", AddDefaultHeaders);
         var httpClient = services
         .BuildServiceProvider()
         .GetRequiredService<IHttpClientFactory>()
         .CreateClient();
         await httpClient.GetStringAsync("http://localhost:5000/");
         }
        
         private static void AddDefaultHeaders(HttpClient httpClient)
         {
         httpClient.DefaultRequestHeaders.Add("x-www-foo", "123");
         httpClient.DefaultRequestHeaders.Add("x-www-bar", "456");
         httpClient.DefaultRequestHeaders.Add("x-www-baz", "789");
         }
        }

        第三種方式

        由于HttpClient在發(fā)送請求的時候會利用DiagnosticSource對象發(fā)送相應的診斷事件,并且將作為請求的HttpRequestMessage對象作為請求事件內(nèi)容負載。我們可以訂閱該事件,在請求被發(fā)送之前將其攔截下來,并添加相應的請求頭即可。

        class Program
        {
         static Task Main()=> SendAsync3();
        
         private static async Task SendAsync3()
         {
         Func<object, HttpRequestMessage> requestAccessor = null;
         DiagnosticListener.AllListeners.Subscribe(listener =>
         {
         if (listener.Name == "HttpHandlerDiagnosticListener")
         {
         listener.Subscribe(kv =>
         {
         if (kv.Key == "System.Net.Http.HttpRequestOut.Start")
         {
         requestAccessor ??= BuildRequestAccessor(kv.Value.GetType());
         var request = requestAccessor(kv.Value);
         AddDefaultHeaders(request);
         }
         });
         }
         });
        
         var httpClient = new HttpClient();
         await httpClient.GetStringAsync("http://localhost:5000/");
         static Func<object, HttpRequestMessage> BuildRequestAccessor(Type payloadType)
         {
         var property = payloadType.GetProperty("Request", BindingFlags.Instance | BindingFlags.Public);
         var payload = Expression.Parameter(typeof(object));
         var convertedPayload = Expression.Convert(payload, payloadType);
         var getRequest = Expression.Call(convertedPayload, property.GetMethod);
         var convert = Expression.Convert(getRequest, typeof(HttpRequestMessage));
         return Expression.Lambda<Func<object, HttpRequestMessage>>(convert, payload).Compile();
         }
         }
        
         private static void AddDefaultHeaders(HttpRequestMessage request)
         {
         request.Headers.Add("x-www-foo", "123");
         request.Headers.Add("x-www-bar", "456");
         request.Headers.Add("x-www-baz", "789");
         }
        }

        第四種方式

        上面這種方式可以采用強類型編程方式,具體的代碼如下。

        class Program
        {
         static Task Main()=> SendAsync4();
        
         private static async Task SendAsync4()
         {
         DiagnosticListener.AllListeners.Subscribe(listener =>
         {
         if (listener.Name == "HttpHandlerDiagnosticListener")
         {
         listener.SubscribeWithAdapter(new HttpClientListener());
         }
         });
         
         var httpClient = new HttpClient();
         await httpClient.GetStringAsync("http://localhost:5000/");
         }
        
         private sealed class HttpClientListener
         {
         [DiagnosticName("System.Net.Http.HttpRequestOut.Start")]
         public void OnSend(HttpRequestMessage request) => AddDefaultHeaders(request);
        
         //Must subscribute the System.Net.Http.HttpRequestOut event.
         [DiagnosticName("System.Net.Http.HttpRequestOut")]
         public void OnSend() { }
         }
        
         private static void AddDefaultHeaders(HttpRequestMessage request)
         {
         request.Headers.Add("x-www-foo", "123");
         request.Headers.Add("x-www-bar", "456");
         request.Headers.Add("x-www-baz", "789");
         }
        }

        總結(jié)

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        為HttpClient添加默認請求報頭的四種解決方案

        為HttpClient添加默認請求報頭的四種解決方案:前言 HttpClient在Web調(diào)用中具有廣泛的應用,而為它添加默認請求頭是我們經(jīng)常遇到的需求,本文介紹4種為HttpClient添加默認請求頭的方式。下面話不多說了,來一起看看詳細的介紹吧 第一種方式 直接在創(chuàng)建的HttpClient對象的DefaultRequestHe
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 三上悠亚在线观看免费| 激情小说亚洲图片| 无码人妻一区二区三区免费n鬼沢| 免费无遮挡无码永久在线观看视频 | 国产精品免费视频播放器| 亚洲国产精品久久网午夜| 精品久久久久成人码免费动漫| 亚洲二区在线视频| 成年轻人网站色免费看| 亚洲乱理伦片在线观看中字| 午夜免费福利在线| 国产精品亚洲一区二区无码| 亚洲国产一级在线观看| 在线看片免费人成视频久网下载| 亚洲AV无码乱码在线观看富二代| 日本一卡精品视频免费| 亚洲妇女水蜜桃av网网站| 好吊妞998视频免费观看在线| 成人精品国产亚洲欧洲| 亚洲一区日韩高清中文字幕亚洲| 青柠影视在线观看免费高清| 久久久久亚洲AV无码专区体验| 国产一卡二卡3卡四卡免费 | 一级毛片视频免费观看| 亚洲精品午夜无码专区| 精品免费人成视频app| 亚洲一区二区观看播放| 亚洲无码高清在线观看| 日本免费高清视频| 亚洲最大av资源站无码av网址| 免费在线黄色网址| 久久久高清日本道免费观看| 亚洲免费视频网址| 免费A级毛片无码A| 午夜免费福利片观看| 亚洲性无码AV中文字幕| 国产亚洲综合一区柠檬导航| 日韩精品无码区免费专区| 久久不见久久见免费影院www日本| 亚洲精品第五页中文字幕| 免费一级黄色毛片|