为HttpClient添加默认请求报头的四种解决方案
前言
HttpClient在Web调用中具有广泛的应用,而为它添加默认请求头是我们经常遇到的需求,本文介绍4种为HttpClient添加默认请求头的方式。下面话不多说了,来一起看看详细的介绍吧
第一种方式
直接在创建的HttpClient对象的DefaultRequestHeaders集合中添加报头。
classProgram { staticTaskMain()=>SendAsync1(); privatestaticasyncTaskSendAsync1() { varhttpClient=newHttpClient(); AddDefaultHeaders(httpClient); awaithttpClient.GetStringAsync("http://localhost:5000/"); } privatestaticvoidAddDefaultHeaders(HttpClienthttpClient) { httpClient.DefaultRequestHeaders.Add("x-www-foo","123"); httpClient.DefaultRequestHeaders.Add("x-www-bar","456"); httpClient.DefaultRequestHeaders.Add("x-www-baz","789"); } }
第二种方式
对于.NETCore应用来说,我们更推荐的做法是采用依赖注入的方式,利用IHttpClientFactory来创建HttpClient对象,那么我们在进行相关服务注册的时候就可以设置默认请求报头。
classProgram { staticTaskMain()=>SendAsync2(); privatestaticasyncTaskSendAsync2() { varservices=newServiceCollection(); services.AddHttpClient("",AddDefaultHeaders); varhttpClient=services .BuildServiceProvider() .GetRequiredService() .CreateClient(); awaithttpClient.GetStringAsync("http://localhost:5000/"); } privatestaticvoidAddDefaultHeaders(HttpClienthttpClient) { httpClient.DefaultRequestHeaders.Add("x-www-foo","123"); httpClient.DefaultRequestHeaders.Add("x-www-bar","456"); httpClient.DefaultRequestHeaders.Add("x-www-baz","789"); } }
第三种方式
由于HttpClient在发送请求的时候会利用DiagnosticSource对象发送相应的诊断事件,并且将作为请求的HttpRequestMessage对象作为请求事件内容负载。我们可以订阅该事件,在请求被发送之前将其拦截下来,并添加相应的请求头即可。
classProgram { staticTaskMain()=>SendAsync3(); privatestaticasyncTaskSendAsync3() { Func
第四种方式
上面这种方式可以采用强类型编程方式,具体的代码如下。
classProgram { staticTaskMain()=>SendAsync4(); privatestaticasyncTaskSendAsync4() { DiagnosticListener.AllListeners.Subscribe(listener=> { if(listener.Name=="HttpHandlerDiagnosticListener") { listener.SubscribeWithAdapter(newHttpClientListener()); } }); varhttpClient=newHttpClient(); awaithttpClient.GetStringAsync("http://localhost:5000/"); } privatesealedclassHttpClientListener { [DiagnosticName("System.Net.Http.HttpRequestOut.Start")] publicvoidOnSend(HttpRequestMessagerequest)=>AddDefaultHeaders(request); //MustsubscributetheSystem.Net.Http.HttpRequestOutevent. [DiagnosticName("System.Net.Http.HttpRequestOut")] publicvoidOnSend(){} } privatestaticvoidAddDefaultHeaders(HttpRequestMessagerequest) { request.Headers.Add("x-www-foo","123"); request.Headers.Add("x-www-bar","456"); request.Headers.Add("x-www-baz","789"); } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。