我想使用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-Language
与Content-Type
相比,将其添加到请求中有什么不同?
答案 0 :(得分:1)
对于每个在同一问题上绊倒的人:这是一个错误。我提交了issue on GitHub,维护者批准了该文件,并说它将在下一个发行版(应为Flurl.Http 2.4.1)中修复。
除了Content-Language
之外,标头Allow
和Content-Encoding
也丢失了,并且将引发与该问题中所述相同的错误。