伪造Api PATCH请求返回415“不支持的媒体类型”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了伪造Api PATCH请求返回415“不支持的媒体类型”相关的知识,希望对你有一定的参考价值。

我正在使用Forge API。我需要执行PATCH请求。当我使用Postman发送它时一切都很好,但是当我使用HttpRequestMessage构建请求时,我得到一个响应 - “415不支持的媒体类型”。通过API文档Content-Type I设置为“application / vnd.api + json”。

邮递员的要求

enter image description here Headers of request in Postman

request object structure

JObject jsonApi = new JObject();
            jsonApi.Add("version", "1.0");
            JObject attributes = new JObject();
            attributes.Add("displayName", file.FileName);
            JObject data = new JObject();
            data.Add("type", "items");
            data.Add("id", file.ExternalFileId);
            data.Add("attributes", attributes);

            JObject request = new JObject();
            request.Add("jsonapi", jsonApi);
            request.Add("data", data);

            using (var httpClient = new HttpClient())
            {
                HttpRequestMessage http = new HttpRequestMessage
                {
                    RequestUri = new Uri(url),
                    Method = new HttpMethod("PATCH"),
                    Headers =
                    {
                        { HttpRequestHeader.Authorization.ToString(), "Bearer " + userLastAccessToken },
                        { HttpRequestHeader.Accept.ToString(), "application/vnd.api+json" }
                    }
                };  
                http.Content = new StringContent(request.ToString(), Encoding.UTF8, "application/vnd.api+json");
                HttpResponseMessage responseMessage = await httpClient.SendAsync(http);
            }
答案

再次使用"application/json"或使用HttpHeaders.TryAddWithoutValidation"application/vnd.api+json"可能不适合HttpHeaders的内部验证):

http.Content = new StringContent(request.ToString(), Encoding.UTF8, "application/json");

要么:

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");

以上是关于伪造Api PATCH请求返回415“不支持的媒体类型”的主要内容,如果未能解决你的问题,请参考以下文章

“标题”:“不支持的媒体类型”,“状态”:从 python 请求 API 时出现 415 错误

当它应该返回 400 错误请求时,Restlet 是不是返回 415 不支持的媒体类型?

Web API Post 返回 415 - 不支持的媒体类型

REST Web 服务返回 415 - 不支持的媒体类型

解决了! - Spring boot:获取 415 不支持的媒体类型

Spring,Angular.js 415 不支持的媒体类型错误