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

时间:2018-08-22 05:01:41

标签: c# .net-core http-headers dotnet-httpclient http-error

我正在使用支持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-Type的{​​{1}}和Accept标头。

我正在编写一个C#方法,该方法将使用.NET Core的application/json类发布到此终结点。但是,发布消息后,我收到HTTP 415错误代码,表示不支持的媒体类型。根据到目前为止的经验,必须在您的内容中设置HttpClient标头(我正在使用Content-Type类),而StringContent标头只能在{{ 1}}标头。这是我的特定示例:

Accept

再次,其中HttpClientvar 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中。

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

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

1 个答案:

答案 0 :(得分:4)

如果尝试的话:

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

您不需要添加Accept标头。