使用Flurl指定JSON请求的内容语言吗?

时间:2018-12-17 17:39:02

标签: c# header http-headers flurl

问题

我想使用Flurl通过指定的内容标头POST JSON发出Content-Language请求。我已经成功设置了内容类型(Content-Type),没有任何问题:

string response = await "https://jsonplaceholder.typicode.com/".AppendPathSegment("posts")
            .WithHeaders(new { Content_Type = "application/json; charset=UTF-8" })
            .PostJsonAsync(new { title = "bar", body = "foo", userId = 1 }).ReceiveString();

Console.WriteLine(response);

正确返回:

{
  "title": "bar",
  "body": "foo",
  "userId": 1,
  "id": 102
}

但是,尝试另外指定Content-Language

string response = await "https://jsonplaceholder.typicode.com/".AppendPathSegment("posts")
            .WithHeaders(new { Content_Type = "application/json; charset=UTF-8", Content_Language = "en-US" })
            .PostJsonAsync(new { title = "bar", body = "foo", userId = 1 }).ReceiveString();

Console.WriteLine(response);

破坏给出错误的代码

  

标题名称滥用。确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用。

我了解应该在内容而非请求上设置内容标头,但是,在阅读了此answer(和this one)之后,似乎不再需要区分请求和内容级别了使用Flurl 2.0 +。

旁注

使用的API是模拟的。我知道使用PostJsonAsync会自动设置Content-Type标头,但是对于我的用例,它将设置为application/vnd.api+json,因此需要明确指定。

问题

我在做什么错?关于内容标题我有什么不明白的地方吗?
Content-LanguageContent-Type相比,将其添加到请求中有什么不同?

1 个答案:

答案 0 :(得分:1)

对于每个在同一问题上绊倒的人:这是一个错误。我提交了issue on GitHub,维护者批准了该文件,并说它将在下一个发行版(应为Flurl.Http 2.4.1)中修复。
除了Content-Language之外,标头AllowContent-Encoding也丢失了,并且将引发与该问题中所述相同的错误。