强制HttpClient使用Content-Type: text/xml

18

这让我感到非常恼火,我已经在所有可能的地方设置了ContentType头部,但好像无法停止发送text/plain。

通过Fiddler观察数据,请求总是请求:

POST http:/domain.com HTTP/1.1

Content-Type: text/plain; charset=utf-8

using (var httpClient = new HttpClient())
{
    var request = new HttpRequestMessage(HttpMethod.Post, "http://domain.com");
        request.Content = new StringContent(Serialize(obj), Encoding.UTF8, "text/xml");
        request.Content.Headers.Clear();
        request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
        request.Headers.Clear();
        request.Headers.Add("Content-Type","text/xml");
        var response = await httpClient.SendAsync(request);
        return  await response.Content.ReadAsStringAsync();
}
3个回答

21

看起来你尝试得太过用力了 :) 这应该是可以正常工作的。

using (var httpClient = new HttpClient())
{
    var request = new HttpRequestMessage(HttpMethod.Post, "http://domain.com");
    request.Content = new StringContent(Serialize(obj), Encoding.UTF8, "text/xml");
    var response = await httpClient.SendAsync(request);
    return  await response.Content.ReadAsStringAsync();
}

1
应该可以,但现在不行。我一开始只是尝试了简单的方法。你检查过 Fiddler 的输出结果了吗? - Chad Grant
是的,我试过了。你用什么平台?我在桌面上尝试了使用.NET Framework的ConsoleApplication。 - outcoldman
3
小心使用 HttpClient 的 "using" 语句。请参阅 "You're using HttpClient wrong and it is destabilizing your software" 文章。 - Brent Matzelle
这个答案不起作用,不知道为什么它是最佳答案? - Tony Cheetham
这是一个7年前的答案。我认为自那时以来,.net已经发生了很大的变化。 - outcoldman
我使用了"application/xml"而不是"text/xml"。 - Muni Chittem

10

尝试设置默认请求头:

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));

3
不行,我试过了。但是Accept头部无法帮助我。我正在尝试设置Content-Type头部。 - Chad Grant
对我来说完美地工作了。 - Steven Ryssaert

7
请使用“application/xml”而不是“text/xml”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接