C#HttpClient,获取错误无法添加值,因为标题'content-type'不支持多个值

Nib*_*Pig 9 c#

HttpClient serviceClient = new HttpClient();
serviceClient.DefaultRequestHeaders.Add("accept", "Application/JSON");

HttpContent content = new StringContent(text);
content.Headers.Add("content-type", "text/html");

var response = await serviceClient.PostAsync(new Uri(_serviceUrl), content);
Run Code Online (Sandbox Code Playgroud)

这是我的代码.我想做一个POST,并将内容类型设置为text/html,但是当我这样做时,我得到了上述错误.

我可以设置它看起来的内容类型,content.Headers.ContentType但如果我这样做,我不知道如何指定"text/html".有人可以帮忙吗?

Cod*_*ter 13

没有准备好.NET 4.5,但根据HttpContentHeaders.ContentTypeMediaTypeHeaderValue,它应该看起来像这样:

content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
Run Code Online (Sandbox Code Playgroud)

  • `content.Headers.ContentType = new MediaTypeHeaderValue("text/html")`被接受了,也许就是这样.它的参数是`string mediaType`. (4认同)

Sha*_*ani 5

此错误意味着您尝试添加已添加到的标头DefaultRequestHeaders(不仅是content-type标头,还包括不支持多个值的任何其他标头)。


就我而言,我从两个不同的位置启动标头,并意外添加了相同的密钥标头两次(例如content-typeAuthentication)。

在(文档)内部startup.cs,例如:IHttpClientFactory

services.AddHttpClient("MyHttpClient", client =>
{
    client.BaseAddress = new Uri("https://www.google.co.il/");
    client.Timeout = new TimeSpan(0, 1, 0);
    client.DefaultRequestHeaders.Add("content-type", "application/json"));
    client.DefaultRequestHeaders.Add("Authorization", "some values"));
});
Run Code Online (Sandbox Code Playgroud)

并在客户服务内部进行了更新:

HttpClient httpClient = this._httpClientFactory.CreateClient("MyHttpClient");    
httpClient.DefaultRequestHeaders.Add("content-type", "application/json")); //Throws Exception!
httpClient.DefaultRequestHeaders.Add("Authorization", "some values")); //Throws Exception!
Run Code Online (Sandbox Code Playgroud)

更新:如果您想确保可以添加标头,您可以仔细使用DefaultRequestHeaders.Clear()


Sau*_*R S 5

一旦您通过执行以下操作将文本值分配给 HttpContent -

HttpContent content = new StringContent(text);
Run Code Online (Sandbox Code Playgroud)

系统会自动为该内容设置内容类型。该内容类型(在字符串内容的情况下)是 -{text/plain; charset=utf-8}

因此,在下一步中,当您尝试显式设置 Content-Type 标头时,您会收到错误 -无法添加值,因为标头“Content-Type”不支持多个值。

您可以通过三种方法设置内容类型并避免此错误:

选项 1.设置内容时指定内容类型

HttpContent content = new StringContent(text, System.Text.Encoding.UTF8, "text/html");
Run Code Online (Sandbox Code Playgroud)

选项 2.设置 ContentType 属性

HttpContent content = new StringContent(text);    
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/html");
Run Code Online (Sandbox Code Playgroud)

选项 3.首先删除自动分配的内容类型标头,然后再次添加该标头。

HttpContent content = new StringContent(text);  
content.Headers.Remove("content-type");  
content.Headers.Add("content-type", "text/html");
Run Code Online (Sandbox Code Playgroud)