使用HttpClient / .NET Core的不受支持的媒体类型

问题描述 投票:0回答:1

我正在使用支持JSON格式的POST请求的RESTful API。 API自己的Swagger文档显示这是对其中一个端点的有效调用:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '<JSON>' '<URL>'

其中<JSON><URL>是有效的JSON消息和端点的URL。从这个Swagger文档中我收集到,此端点的任何帖子都必须包含设置为Content-TypeAcceptapplication/json标头。

我正在编写一个C#方法,它将使用.NET Core的HttpClient类发布到此端点。但是,在发布我的消息后,我收到了一个HTTP 415错误代码,用于不支持的媒体类型。根据我到目前为止所学到的,必须在你的内容中设置Content-Type标题(我使用的是StringContent类),Accept标题只能在HttpClient标题中设置。这是我的特例:

var httpContent = new StringContent("<JSON>", Encoding.UTF32, "application/json");
var httpClient = new HttpClient();

httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var responseMessage = httpClient.PostAsync("<URL>", httpContent);
var result = responseMessage.Result;

再一次,<JSON><URL>是有效的JSON消息和端点的URL。在我看来,第三行,我参考httpCllient.DefaultRequestHeaders,没有添加Accept: application/json标头我的请求。如果我手动将标题添加到httpContent.Headers集合,我会得到一个运行时错误,告诉我Accept不是我可以添加到httpContent的标题。这就是为什么我希望将它添加到httpClient而不是。

我已经使用Swagger验证了URL和我的JSON,所以我知道这些是正确的。此外,请求是通过HTTPS完成的,因此我无法使用Fiddler来验证是否包含Accept标头。虽然我可以在Fiddler中启用解密,但这是另一个蜡球。我不想将他们的根证书添加到我的系统中,特别是如果我错过了一些相当简单的东西,这似乎就是这样。

任何指针将不胜感激。谢谢。

c# .net-core http-headers dotnet-httpclient http-error
1个回答
4
投票

如果你尝试怎么样:

var httpContent = new StringContent(jsonData, Encoding.UTF8, "application/json");

您不需要添加Accept标头。

© www.soinside.com 2019 - 2024. All rights reserved.