C# Forge Api补丁请求返回415“;“不支持的媒体类型”;
我正在使用Forge API。 我需要执行补丁请求。 当我使用Postman发送它时,一切都很好,但是当我使用HttpRequestMessage构建请求时,我得到一个响应——“415不支持的媒体类型”。 根据API文档内容类型,我设置为“application/vnd.API+json” 邮递员的请求正文 请使用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”可能与
“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");