HttpRequestMessage多个自定义报头相互覆盖
本文关键字:覆盖 报头 自定义 HttpRequestMessage | 更新日期: 2023-09-27 18:01:39
我正在努力理解如何添加多个头到HttpRequestMessage。我的意思是,我得到了基本信息,如果我做一个标题,它可以工作但多个标题,最后一个是什么,其他的都覆盖了吗?
因此,例如,接受头将被覆盖,但授权头将保留。
HttpRequestMessage httpreqmsg = new HttpRequestMessage();
httpreqmsg.Headers.Add("Accept", "CustomAccept");
httpreqmsg.Headers.Add("Authorization", "asdfas#%fwqerq@werfds...");
现在HttpRequestMessage有一个重载签名
.Add(string, List<string>)
,这是很好的,如果你有一个名字与多个值,但你如何做多个头。TryAddWithoutValidation是否有与上面相同的重载?
TIA
大…所以我在帖子里犯了个错误。我不认为这很重要,但其实很重要。我正在单元测试控制器,因此没有创建HttpClient对象。
似乎"Accept"头是保留的。无论我尝试给它赋什么值,都会抛出FormatException。
如果你把你的代码改成这样,你会得到两个头文件。
HttpRequestMessage httpreqmsg = new HttpRequestMessage();
httpreqmsg.Headers.Add("Lolz", "CustomAccept");
httpreqmsg.Headers.Add("Authorization", "SomeValue");
foreach (var item in httpreqmsg.Headers)
{
Console.WriteLine(item.Key + " : " + item.Value);
}
在您的示例中'Authorization'的值也是无效的,但我猜这只是随机密钥混列:)
不确定你的代码的上下文,但你可以使用HttpClient (WebApi NuGet)代替,它可以让你添加"Accept"answers"Authorization"头:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("scheme", "param");
//client.PostAsJsonAsync or something else
}
基于@sidjames的帖子。看起来您正在寻找Accept和Authorization头。如果是这种情况,那么在HttpClient中设置它,而不是HttpRequestMessage:
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("some accept"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "your parameters");
在StackOverflow上有一堆接受和授权的例子。