为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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。