我正在使用支持 JSON 格式的 POST 请求的 RESTful API。 API 自己的 Swagger 文档显示这是对其端点之一的有效调用:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '<JSON>' '<URL>'
Where <JSON>
and <URL>
是有效的 JSON 消息和端点的 URL。从这个 Swagger 文档中我了解到,任何发送到此端点的帖子都必须包含Content-Type
and Accept
标题设置为application/json
.
我正在编写一个将使用 .NET Core 的 C# 方法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>
and <URL>
是有效的 JSON 消息和端点的 URL。在我看来,我提到的第三行httpCllient.DefaultRequestHeaders
,不添加Accept: application/json
我的请求的标题。如果我手动将标题添加到httpContent.Headers
集合,我收到一个运行时错误,告诉我Accept
不是我可以添加到的标题httpContent
。这就是为什么我希望将其添加到httpClient
反而。
我已经使用 Swagger 验证了 URL 和 JSON,所以我知道它们是正确的。另外,请求是通过 HTTPS 完成的,因此我无法使用 Fiddler 来验证Accept
正在包含标题。虽然我可以在 Fiddler 中启用解密,但这完全是另一回事。我不想将他们的根证书添加到我的系统中,特别是如果我缺少一些相当简单的东西(这似乎是)。
任何指示将不胜感激。谢谢。