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.ContentType和MediaTypeHeaderValue,它应该看起来像这样:
content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
Run Code Online (Sandbox Code Playgroud)
此错误意味着您尝试添加已添加到的标头DefaultRequestHeaders(不仅是content-type标头,还包括不支持多个值的任何其他标头)。
就我而言,我从两个不同的位置启动标头,并意外添加了相同的密钥标头两次(例如content-type或Authentication)。
在(文档)内部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()
一旦您通过执行以下操作将文本值分配给 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)
| 归档时间: |
|
| 查看次数: |
9409 次 |
| 最近记录: |