我正在使用支持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
再次,其中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
中。
我已经使用Swagger验证了URL和JSON,所以我知道它们是正确的。另外,请求是通过HTTPS完成的,因此我无法使用Fiddler来验证是否包含httpContent
头。虽然我可以在Fiddler中启用解密,但这是另外一个蜡球。我不想将其根证书添加到我的系统中,尤其是如果我缺少一些相当简单的东西(似乎是这样)。
任何指针将不胜感激。谢谢。
答案 0 :(得分:4)
如果尝试的话:
var httpContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
您不需要添加Accept标头。