C# httpclient调用c中不支持的媒体类型#
我正在尝试发布以下请求,但收到“不支持的媒体类型”响应。我正在将内容类型设置为application/json。任何帮助都将不胜感激。根据下面的注释,如果我将内容更改为“new StringContent(JsonConvert.SerializeObject(root),Encoding.UTF8,“application/json”),那么我会得到错误的请求响应C# httpclient调用c中不支持的媒体类型#,c#,rest,C#,Rest,我正在尝试发布以下请求,但收到“不支持的媒体类型”响应。我正在将内容类型设置为application/json。任何帮助都将不胜感激。根据下面的注释,如果我将内容更改为“new StringContent(JsonConvert.SerializeObject(root),Encoding.UTF8,“application/json”),那么我会得到错误的请求响应 string URL = "https://test.com/api/v2/orders/"; //plea
string URL = "https://test.com/api/v2/orders/"; //please note it is dummy api endpoint
var client = new HttpClient();
var httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri(URL),
Headers = {
{ HttpRequestHeader.Authorization.ToString(), "Bearer ABcdwenlfbl8HY0aGO9Z2NacFj1234" }, //please note it is dummy bearer token
{ HttpRequestHeader.Accept.ToString(), "application/json;indent=2" },
{ HttpRequestHeader.ContentType.ToString(), "application/json" }
},
//Content =new StringContent(JsonConvert.SerializeObject(root), Encoding.UTF8, "application/json")
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root))
};
var response = client.SendAsync(httpRequestMessage).Result;
使用
HttpClient
,一些头被计为请求头,而其他头被计为内容头。我不知道他们为什么要这样区分,但底线是你必须在正确的位置添加标题
对于内容类型
,可以将其添加为StringContent
构造函数的一部分,或添加到构造的StringContent
对象中
我的方法是使用构造函数:
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root), System.Text.Encoding.UTF8, "application/json");
或者在之后设置:
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root))
Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
注意:如果您的问题在进行此更改后仍然存在,则可能是服务器端问题,您需要联系API的维护人员以询问您的错误。我更喜欢使用一些第三方包装,如 请注意,您不应该为每个请求都实例化一个新对象,O只是为了示例而这样做的
var client = new FluentClient("https://test.com/api/v2/orders/")
.PostAsync(URI)
.WithBody(root)
.WithBearerAuthentication("ABcdwenlfbl8HY0aGO9Z2NacFj1234");
var response = await client.AsResponse();
但是,当我添加以下内容时:Content=newstringcontent(Newtonsoft.Json.JsonConvert.SerializeObject(root),System.Text.Encoding.UTF8,“application/Json”);然后我得到的响应是“坏请求”状态码:400,原因短语:“坏请求”,版本:1.1,内容:System.Net.Http.StreamContent,标题:{连接:keep alive Vary:Accept Vary:Cookie Vary:Origin referer-....这不是服务器端的问题,因为它在邮递员呼叫中运行良好。好的,您需要做的是使用像Telerik的Fiddler这样的工具捕获邮递员和.NET请求,然后比较您的工作邮递员请求我认为这是因为你没有收到“错误的请求”,您当前问题所涉及的问题已经解决:服务器现在理解请求,但出于某种原因,它对请求不满意。您应该获得我建议的信息,并发布一个关于该问题的新问题。注意,即使请求失败响应代码,您也可以阅读响应内容。如果服务器的回答是有帮助的,它还可以让你洞察问题的症结所在。在这个标题下实施解决方案后,或者在之后设置:我停止了磕头!!谢谢你的回答。。