c# - 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>
。从这个 Swagger 文档中,<URL>
我收集到该端点的任何帖子都必须包括设置为.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 标头。
推荐阅读
- python - 如何按周组装 groupby datetime
- sparql - 在限制类中使用最大基数的 OWL 推理问题
- python - 交互式字典,TypeError:'dict'不可调用?
- sh - Protobuf Build Protoc 选择目录中的所有 .proto 文件
- python-3.x - 如何在python中将时间戳转换为毫秒
- sql-server - 创建登录和用户后无法连接到服务器
- c++ - Program is meant to count how many duplicates are in an array. However, it returns the wrong frequency values
- django - django 频道中的流生产者
- mysql - 从三个表的多路连接中有效过滤重复项
- c++ - 另一个 hpp 中的二等舱未识别该课程