我试图在.net核心项目中使用HttpClient向接受/返回JSON的REST服务发出GET请求。我无法控制外部服务。
无论我如何尝试,我都无法确定将Content-Type标头设置为仅应用程序/ json 。
当我使用
时client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
它发送HTTP GET请求:
Content-Type: application/json; charset=utf-8
但是,此特定服务不适用于此。它仅在标题为:
时才有效Content-Type: application/json
我尝试过设置标题而不进行验证,而我在网络上找到的所有方法/ SO都不适用于.net核心。所有其他发送HTTP请求的方法在.net核心中都不可用,所以我需要弄明白这一点。如何在内容类型中排除字符集?
使用解决方法进行编辑
如答案中所述,该服务应该使用Accept标头。解决方法(正如Shaun Luttin在他的回答中所说)是为GET添加一个空的内容(什么?GETs没有内容!是的......)。它不漂亮,但确实有效。
答案 0 :(得分:5)
您正在设置Accept
标头。您需要设置ContentType
标头,这只是POST的规范。
var client = new HttpClient();
var content = new StringContent("myJson");
content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
var result = client.PostAsync("http://bigfont.ca", content).Result;
如果你真的想把它设置为GET,你可以这样做:
var client = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, "http://www.bigfont.ca");
message.Content = new StringContent(string.Empty);
message.Content.Headers.Clear();
message.Content.Headers.Add("Content-Type", "application/json");
var result = client.SendAsync(message).Result;
答案 1 :(得分:0)
如果您是客户并执行GET
请求,您如何指定Content-Type
?它不应该说出你能够Accept
的能力吗?根据此7.2.1 Type,您只能在Content-Type
时设置Body
。