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对象。

HttpRequestMessage多个自定义报头相互覆盖

似乎"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上有一堆接受和授权的例子。