首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置HttpClient请求的内容类型标头?

如何设置HttpClient请求的内容类型标头?
EN

Stack Overflow用户
提问于 2012-05-21 11:29:18
回答 16查看 1M关注 0票数 941

我在试着设置

对象的标头

对象,这是我正在调用的API所需的。

我试着设置

如下所示:

代码语言:javascript
运行
复制
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");
    // ...
}

它允许我添加

标题,但当我尝试添加

它抛出以下异常:

错误使用的标头名称。确保请求头与一起使用

,响应头

,和内容标头

对象。

如何设置

中的标头

请求?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2012-05-21 11:54:34

内容类型是内容的头,而不是请求的头,这就是失败的原因。

按照Robert Levy的建议

可以工作,但您也可以在创建请求内容本身时设置内容类型(请注意,代码片段添加了

在两个地方-对于Accept和Content-Type标头):

代码语言:javascript
运行
复制
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);
      });
票数 1.2K
EN

Stack Overflow用户

发布于 2013-06-06 18:15:18

对于那些没有看到Johns对卡洛斯解决方案的评论的人...

代码语言:javascript
运行
复制
req.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
票数 196
EN

Stack Overflow用户

发布于 2014-06-22 23:19:50

如果你不介意一个小的库依赖,

Flurl.Http

披露:我是作者

让这一切变得非常简单。Its

方法负责序列化内容和设置

标题和

反序列化响应。如果

header是必需的,你需要自己设置,但Flurl也提供了一种非常简洁的方法:

代码语言:javascript
运行
复制
using Flurl.Http;

var result = await "http://example.com/"
    .WithHeader("Accept", "application/json")
    .PostJsonAsync(new { ... })
    .ReceiveJson();

Flurl在幕后使用了HttpClient和Json.NET,而且它是一个PCL,所以它可以在各种平台上工作。

代码语言:javascript
运行
复制
PM> Install-Package Flurl.Http
票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10679214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档