Chr*_*rea 2 c# http-error http-headers dotnet-httpclient .net-core
我正在使用支持JSON格式的POST请求的RESTful API。API自己的Swagger文档显示这是对其端点之一的有效调用:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '<JSON>' '<URL>'
Run Code Online (Sandbox Code Playgroud)
其中<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;
Run Code Online (Sandbox Code Playgroud)
再一次,在<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");
Run Code Online (Sandbox Code Playgroud)
您不需要添加Accept标头。
| 归档时间: |
|
| 查看次数: |
2496 次 |
| 最近记录: |