我在试着设置
对象的标头
对象,这是我正在调用的API所需的。
我试着设置
如下所示:
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("http://example.com/");
httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
httpClient.DefaultRequestHeaders.Add("Content-Type", "application/json");
// ...
}它允许我添加
标题,但当我尝试添加
它抛出以下异常:
错误使用的标头名称。确保请求头与一起使用
,响应头
,和内容标头
对象。
如何设置
中的标头
请求?
发布于 2012-05-21 11:54:34
内容类型是内容的头,而不是请求的头,这就是失败的原因。
按照Robert Levy的建议
可以工作,但您也可以在创建请求内容本身时设置内容类型(请注意,代码片段添加了
在两个地方-对于Accept和Content-Type标头):
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://example.com/");
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress");
request.Content = new StringContent("{\"name\":\"John Doe\",\"age\":33}",
Encoding.UTF8,
"application/json");//CONTENT-TYPE header
client.SendAsync(request)
.ContinueWith(responseTask =>
{
Console.WriteLine("Response: {0}", responseTask.Result);
});发布于 2013-06-06 18:15:18
对于那些没有看到Johns对卡洛斯解决方案的评论的人...
req.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");发布于 2014-06-22 23:19:50
如果你不介意一个小的库依赖,
Flurl.Http
披露:我是作者
让这一切变得非常简单。Its
方法负责序列化内容和设置
标题和
反序列化响应。如果
header是必需的,你需要自己设置,但Flurl也提供了一种非常简洁的方法:
using Flurl.Http;
var result = await "http://example.com/"
.WithHeader("Accept", "application/json")
.PostJsonAsync(new { ... })
.ReceiveJson();Flurl在幕后使用了HttpClient和Json.NET,而且它是一个PCL,所以它可以在各种平台上工作。
PM> Install-Package Flurl.Httphttps://stackoverflow.com/questions/10679214
复制相似问题