C# Forge Api补丁请求返回415“;“不支持的媒体类型”;

C# Forge Api补丁请求返回415“;“不支持的媒体类型”;,c#,asp.net,autodesk-forge,C#,Asp.net,Autodesk Forge,我正在使用Forge API。 我需要执行补丁请求。 当我使用Postman发送它时,一切都很好,但是当我使用HttpRequestMessage构建请求时,我得到一个响应——“415不支持的媒体类型”。 根据API文档内容类型,我设置为“application/vnd.API+json” 邮递员的请求正文 请使用“application/json”重试,或使用HttpHeaders.TryAddWithoutValidation(“application/vnd.api+json”可能与

我正在使用Forge API。 我需要执行补丁请求。 当我使用Postman发送它时,一切都很好,但是当我使用HttpRequestMessage构建请求时,我得到一个响应——“415不支持的媒体类型”。 根据API文档内容类型,我设置为“application/vnd.API+json”

邮递员的请求正文

请使用
“application/json”
重试,或使用
HttpHeaders.TryAddWithoutValidation
“application/vnd.api+json”
可能与
HttpHeaders的内部验证不兼容):

或:

请使用
“application/json”
重试,或使用
HttpHeaders.TryAddWithoutValidation
“application/vnd.api+json”
可能与
HttpHeaders的内部验证不兼容):

或:


好的,我通过这样设置ContentType解决了这个问题

http.Content = new StringContent(request.ToString(), Encoding.UTF8);
http.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/vnd.api+json");

好的,我通过这样设置ContentType解决了这个问题

http.Content = new StringContent(request.ToString(), Encoding.UTF8);
http.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/vnd.api+json");


不要设置
HttpRequestHeader.Accept
您应该将
HttpRequestHeader.ContentType
设置为
application/vnd.api+json
I在http.Content=new-StringContent(…)中设置ContentType,因为ContentType是主体标头的属性,requestContentType不指定在请求正文中发送的数据的数据类型。所以,若您在请求体中发送json数据,那个么应该设置内容类型。在您的屏幕截图中,我注意到您选择了
raw->text
,因此如果内容类型在postmanNo中工作,则应将其设置为application/text,而在Postman中,我将内容类型设置为“application/vnd.api+json”(参见上面编辑的问题)不要设置
HttpRequestHeader.Accept
您应该将
HttpRequestHeader.ContentType
设置为
application/vnd.api+json
I在http.Content=new-StringContent(…)中设置ContentType,因为ContentType是主体标头的属性,requestContentType不指定在请求正文中发送的数据的数据类型。所以,若您在请求体中发送json数据,那个么应该设置内容类型。在您的屏幕截图中,我注意到您选择了
raw->text
,因此如果内容类型在postmanNo中工作,则应将其设置为application/text,而在Postman中,我将内容类型设置为“application/vnd.api+json”(参见上面编辑的问题),我不能使用“application/json”,因为forge api严格规定它必须是“application/vnd.api+json”. 第二种方法是不正确的,因为ContentType是body头的属性,而不是请求http.headers.TryAddWithoutValidation(“Content-Type”,“application/vnd.api+json”);没有像
正文标题那样的东西。。。您正在以任何方式设置请求头。。。传递给
HttpContent
(或确切的实现
StringContent
)的第三个参数将请求头中的内容类型设置为指定的媒体类型。。。请参阅以获得更好的解释。可能我写错了,但我的意思是,查询对象在标题中不包含“内容类型”,它位于request.Content.Headers.Content-Type(请参阅编辑的问题)中。请确保查询对象与媒体类型或您遇到的错误无关。我的两种方法都是设置请求头的
内容类型
,而不是查询对象。。。当您创建
StringContent
时,第三个参数在
请求头中设置
内容类型
字段,而不是请求有效负载/正文或查询对象。这种
HttpContent
方法可能会让人困惑,因为您显然只在内容/正文有效负载上操作,而不是在请求上操作使用它的头,但使用第三个参数,您确实设置了请求头,因此我采用了第二种方法来抑制
HttpContent
(超类
StringContent
)反过来,
HttpHeaders
可能会拒绝将
application/vnd.api+json
作为有效的媒体类型…我不能使用“application/json”,因为forge api严格规定它必须是“application/vnd.api+json”。第二种方法是不正确的,因为ContentType是body头的属性,而不是请求http.headers.TryAddWithoutValidation(“Content-Type”,“application/vnd.api+json”);没有像
正文标题那样的东西。。。您正在以任何方式设置请求头。。。传递给
HttpContent
(或确切的实现
StringContent
)的第三个参数将请求头中的内容类型设置为指定的媒体类型。。。请参阅以获得更好的解释。可能我写错了,但我的意思是,查询对象在标题中不包含“内容类型”,它位于request.Content.Headers.Content-Type(请参阅编辑的问题)中。请确保查询对象与媒体类型或您遇到的错误无关。我的两种方法都是设置请求头的
内容类型
,而不是查询对象。。。当您创建
StringContent
时,第三个参数在
请求头中设置
内容类型
字段,而不是请求有效负载/正文或查询对象。这种
HttpContent
方法可能会让人困惑,因为您显然只在内容/正文有效负载上操作,而不是在请求上操作使用它的头,但使用第三个参数,您确实设置了请求头,因此我采用了第二种方法来抑制
HttpContent
(超类
StringContent
)反过来,
HttpHeaders
可能会拒绝将
application/vnd.api+json
作为有效的媒体类型…这与将
HttpRequestHeader.ContentType
设置为
application/vnd.api+json
有什么不同?内容类型是必须添加到http.Content.Headers的头,不发送到HttpRequestMessage.headershtpr
http.Content = new StringContent(request.ToString(), Encoding.UTF8);
http.Headers.TryAddWithoutValidation("Content-Type", "application/vnd.api+json");
http.Content = new StringContent(request.ToString(), Encoding.UTF8);
http.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/vnd.api+json");