如何更改HttpContent的标头

时间:2017-11-09 09:33:07

标签: c# httpclient

我有这段代码可以将我的内容标题从{text/plain; charset=utf-8}更改为"{application/json}"

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    string content = "some json data";
    System.Net.Http.StringContent sc = new System.Net.Http.StringContent(content);
    sc.Headers.Remove("Content-Type"); // "{text/plain; charset=utf-8}"
    sc.Headers.Add("Content-Type", "application/json");
    System.Net.Http.HttpResponseMessage response = client.PostAsync("http://foo.bar", sc).Result;
}

有没有办法直接修改它而不是删除并添加它?

2 个答案:

答案 0 :(得分:2)

使用此StringContent的重叠来设置内容类型

sc = new StringContent(content, Encoding.UTF8, "application/json");

在此之后,您不需要添加/删除标头值。

答案 1 :(得分:1)

如果你通过序列化一些数据手动构建json字符串,那么有更好的方法。您可以使用PostAsJsonAsync扩展方法:

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    var response = await client.PostAsJsonAsync("http://foo.bar", data);
}

它会自动执行以下操作

  • 将数据序列化为JSON
  • 创建StringContent
  • 提供正确的application / json媒体类型