Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# httpclient调用c中不支持的媒体类型#_C#_Rest - Fatal编程技术网

C# httpclient调用c中不支持的媒体类型#

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

我正在尝试发布以下请求,但收到“不支持的媒体类型”响应。我正在将内容类型设置为application/json。任何帮助都将不胜感激。根据下面的注释,如果我将内容更改为“new StringContent(JsonConvert.SerializeObject(root),Encoding.UTF8,“application/json”),那么我会得到错误的请求响应

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请求,然后比较您的工作邮递员请求我认为这是因为你没有收到“错误的请求”,您当前问题所涉及的问题已经解决:服务器现在理解请求,但出于某种原因,它对请求不满意。您应该获得我建议的信息,并发布一个关于该问题的新问题。注意,即使请求失败响应代码,您也可以阅读响应内容。如果服务器的回答是有帮助的,它还可以让你洞察问题的症结所在。在这个标题下实施解决方案后,或者在之后设置:我停止了磕头!!谢谢你的回答。。