HttpClient / .NET Core 不支持的媒体类型
Unsupported Media Type with HttpClient / .NET Core
我正在使用支持 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 文档我收集到任何 posts 到这个端点必须包括一个 Content-Type
和 Accept
headers 设置为 application/json
.
我正在编写一个 C# 方法,它将使用 .NET Core 的 HttpClient
class 到 post 到此端点。但是,在 post 发送我的消息后,我收到了 HTTP 415 错误代码,表示不支持的媒体类型。根据我到目前为止所学到的,必须在您的内容中设置 Content-Type
header(我使用的是 StringContent
class)和 Accept
header只能在HttpClient
header中设置。这是我的具体示例:
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
header 添加到我的请求中。如果我手动将 header 添加到 httpContent.Headers
collection,我会得到一个 run-time 错误,告诉我 Accept
不是 header 我可以添加到httpContent
。这就是为什么我希望将它添加到 httpClient
中。
我已经用 Swagger 验证了 URL 和我的 JSON,所以我知道它们是正确的。此外,请求是通过 HTTPS 完成的,因此我无法使用 Fiddler 来验证是否包含 Accept
header。虽然我可以在 Fiddler 中启用解密,但这完全是另一回事。我不想将他们的根证书添加到我的系统中,尤其是当我遗漏了一些相当简单的东西时,这似乎是这样。
任何指点将不胜感激。谢谢。
如果你试试呢:
var httpContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
您不需要添加接受 header。
我正在使用支持 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 文档我收集到任何 posts 到这个端点必须包括一个 Content-Type
和 Accept
headers 设置为 application/json
.
我正在编写一个 C# 方法,它将使用 .NET Core 的 HttpClient
class 到 post 到此端点。但是,在 post 发送我的消息后,我收到了 HTTP 415 错误代码,表示不支持的媒体类型。根据我到目前为止所学到的,必须在您的内容中设置 Content-Type
header(我使用的是 StringContent
class)和 Accept
header只能在HttpClient
header中设置。这是我的具体示例:
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
header 添加到我的请求中。如果我手动将 header 添加到 httpContent.Headers
collection,我会得到一个 run-time 错误,告诉我 Accept
不是 header 我可以添加到httpContent
。这就是为什么我希望将它添加到 httpClient
中。
我已经用 Swagger 验证了 URL 和我的 JSON,所以我知道它们是正确的。此外,请求是通过 HTTPS 完成的,因此我无法使用 Fiddler 来验证是否包含 Accept
header。虽然我可以在 Fiddler 中启用解密,但这完全是另一回事。我不想将他们的根证书添加到我的系统中,尤其是当我遗漏了一些相当简单的东西时,这似乎是这样。
任何指点将不胜感激。谢谢。
如果你试试呢:
var httpContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
您不需要添加接受 header。