此资源不支持请求实体的媒体类型“text/plain”

Posted

技术标签:

【中文标题】此资源不支持请求实体的媒体类型“text/plain”【英文标题】:The request entity's media type 'text/plain' is not supported for this resource 【发布时间】:2017-07-05 08:01:52 【问题描述】:

我正在编写一个带有 POST 请求的服务:

    [HttpPost]
    [ActionName("Post")]
    public HttpResponseMessage Post([FromBody]string JStringCont)
    
       ....
    

对该服务的调用如下:

    string jsonContent="[some json]"
    StringContent content = new StringContent(jsonContent);
    _oHttpClient = new HttpClient();
    _oHttpClient.DefaultRequestHeaders.Accept.Clear();
_oHttpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

response = _oHttpClient.PostAsync(requestURI, content).Result;

服务显然是通过发送参数字符串内容来调用的。 我不能更改调用服务的方式。

我可以对服务本身进行更改。 POST 方法不能接受字符串格式。 我可以在接受字符串内容的 POST 请求中使用的参数是什么??

目前它给我错误:

响应:不支持的媒体类型

"Message":"该资源不支持请求实体的媒体类型'text/plain'。","ExceptionMessage":"没有MediaTypeFormatter可用于从具有媒体的内容中读取'String'类型的对象在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent 内容,类型类型,IEnumerable@ 987654323@1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)"

【问题讨论】:

你试过JsonResult吗? 尝试发送值为 application/json 的 Content-Type 标头? 我不允许触摸调用服务的代码。我想按照它被调用的方式进行服务 【参考方案1】:

您应该允许JsonMediaTypeFormatter 使用Content-Type: text/plain 解析请求。所以在启动你的应用程序时(在Startup.csWebApiConfig.cs 文件中)你需要 -

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));

config 是 HttpConfiguration 对象。

【讨论】:

确实有帮助。谢谢。【参考方案2】:

System.AggregateException:发生一个或多个错误。 ---> System.Net.Http.UnsupportedMediaTypeException:没有 MediaTypeFormatter 可用于从内容中读取“字符串”类型的对象 媒体类型“文本/纯文本”。

我在使用返回类型为字符串的 put 调用时遇到了错误,

我使用了putasync,返回类型为任务字符串。

问题已解决,这应该也适合你

【讨论】:

以上是关于此资源不支持请求实体的媒体类型“text/plain”的主要内容,如果未能解决你的问题,请参考以下文章

将图像发布到 asp.net API 2 和 angular 2

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

不支持的媒体类型 Django API

Web API 中 OData POST 的媒体资源支持

带有 REST Post 请求的 415(不支持的媒体类型)

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