我正在使用支持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
的Accept
和application/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中启用解密,但这是另一个蜡球。我不想将他们的根证书添加到我的系统中,特别是如果我错过了一些相当简单的东西,这似乎就是这样。
任何指针将不胜感激。谢谢。
如果你尝试怎么样:
var httpContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
您不需要添加Accept标头。