我正在尝试根据我正在调用的 API 的要求设置对象的标头。Content-Type
HttpClient
我尝试设置如下:Content-Type
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");
// ...
}
它允许我添加标题,但是当我尝试添加它时会引发以下异常:Accept
Content-Type
误用的标头名称。确保请求标头与 一起使用,响应标头与 一起使用,
内容标头与
对象一起使用。HttpRequestMessage
HttpResponseMessage
HttpContent
如何在请求中设置标头?Content-Type
HttpClient
网友回答:
对于那些没有看到约翰斯评论卡洛斯解决方案的人……
req.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
网友回答:
内容类型是内容的标头,而不是请求的标头,这就是失败的原因。 正如 Robert Levy 所建议的那样,可能会起作用,但您也可以在创建请求内容本身时设置内容类型(请注意,代码片段在两个位置添加 – 用于接受和内容类型标头):AddWithoutValidation
application/json
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);
});
网友回答:
如果你不介意一个小的库依赖,Flurl.Http [披露:我是作者] 使这个超级简单。它的方法负责序列化内容和设置标头,并反序列化响应。如果需要标头,则需要自己设置,但 Flurl 也提供了一种非常干净的方法:PostJsonAsync
content-type
ReceiveJson
accept
using Flurl.Http;
var result = await "http://example.com/"
.WithHeader("Accept", "application/json")
.PostJsonAsync(new { ... })
.ReceiveJson<TResult>();
Flurl使用HttpClient和 Json.NET,它是一个PCL,所以它可以在各种平台上工作。
PM> Install-Package Flurl.Http
模板简介:该模板名称为【如何为 HttpClient 请求设置 Content-Type 标头?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。