HttpRequestMessage 多个自定义标头相互覆盖
Posted
技术标签:
【中文标题】HttpRequestMessage 多个自定义标头相互覆盖【英文标题】:HttpRequestMessage multiple custom headers overwriting each other 【发布时间】:2015-07-09 02:03:07 【问题描述】:我很难理解如何将多个标头添加到 HttpRequestMessage。我的意思是我掌握了基础知识,如果我做一个标题它可以工作,但多个标题和最后一个是什么棒,所有其他的都被覆盖?
因此,例如 Accept 标头将被覆盖,但授权标头将被粘贴。
HttpRequestMessage httpreqmsg = new HttpRequestMessage();
httpreqmsg.Headers.Add("Accept", "CustomAccept");
httpreqmsg.Headers.Add("Authorization", "asdfas#%fwqerq@werfds...");
现在 HttpRequestMessage 有一个带有签名的重载
.Add(string, List<string>)
如果您有一个具有多个值的名称,那很好,但是您如何处理多个标题。 TryAddWithoutValidation 的重载和上面一样吗?
TIA
太好了...所以我在帖子中犯了一个错误。我不认为这很重要,但确实如此。我正在对控制器进行单元测试,因此没有创建 HttpClient 对象。
【问题讨论】:
【参考方案1】:似乎“接受”标头已保留。无论我尝试为其分配什么值,都会引发 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);
您的示例中的“授权”值也是无效的,但我猜这只是随机密钥混搭:)
【讨论】:
【参考方案2】:不确定代码的上下文,但您可以改用 HttpClient (WebApi NuGet),它可以让您添加“Accept”和“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
【讨论】:
我猜他们已经在使用 HttpClient,它们都是 System.Net.Http 的一部分(我认为是正确的命名空间)。还将解释为什么“接受”似乎是一个保留的标题。 :)【参考方案3】:以@sidjames 的帖子为基础。看来您正在寻找 Accept 和 Authorization 标头。如果是这种情况,那么在 HttpClient 中设置它,而不是在 HttpRequestMessage 中:
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("some accept"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "your parameters");
*** 上有很多accept 和authorization 的示例。
【讨论】:
以上是关于HttpRequestMessage 多个自定义标头相互覆盖的主要内容,如果未能解决你的问题,请参考以下文章
HttpRequestMessage.GetClientCertificate() 在 Web API 中返回 null
Flink Table API & SQL 自定义 Table 表函数
Flink Table API & SQL 自定义 Scalar 标量函数
c# 如何正确传递 HttpRequestMessage 并在函数外返回 HttpRequestMessage 而不会泄漏