【问题标题】:POSTMAN - post request giving "The request entity's media type 'application/json' is not supported for this resource."POSTMAN - 发布请求,给出“此资源不支持请求实体的媒体类型‘application/json’。”
【发布时间】:2018-02-09 13:21:48
【问题描述】:

Web API 代码:

[HttpPost]
[ODataRoute("GetCMMAutoForLoggedInUser")]
public IHttpActionResult GetCMMAutoForLoggedInUser(CMMPermissionRequest request)
{
    var data = this.CommonDomain.GetCMMAutoForLoggedInUser(request);

    return Ok(data);
}

在正文中我在 JSON 下方指定:

{ "EnterPriseId": "prasad.kiran.shigwan",
"LocationLevelId": "5",
"LocationLevelValue": "SZ"
} 

但在 POSTMAN 工具中出现异常:

{
    "error": {
        "code": "",
        "message": "The request entity's media type 'application/json' is not supported for this resource.",
        "innererror": {
            "message": "No MediaTypeFormatter is available to read an object of type 'CMMPermissionRequest' from content with media type 'application/json'.",
            "type": "System.Net.Http.UnsupportedMediaTypeException",
            "stacktrace": "   at System.Net.Http.HttpContentExtensions.ReadAsAsync\[T\](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
        }
    }
}

请参阅下面来自 POSTMAN 的 json 屏幕截图:

【问题讨论】:

  • 另一端的服务器是否支持 json - 或者是 xml 还是什么?
  • 请记住,当您从下拉列表中选择JSON(application/json) 时,POSTMAN 会自动为您创建一个标题(Content-Type:application/json)
  • @Andez 是的,它支持 json。
  • 有几件事:1) Content-Type 实际上只适用于 POST,因为它描述了您向 API 发送 的内容; 2) 对于 GET 请求,您应该将 Accept 标头设置为 application/json 以告诉 API 您希望返回 JSON。 ASP.NET WebApi 支持 JSON,除非您在 WebApiConfig.Register 方法中更改了 config.Formatters 集合的内容。

标签: angular asp.net-web-api asp.net-web-api2


【解决方案1】:

ASP.Net Web API 有几个内置的媒体类型格式化程序,它们负责从 json、xml 等序列化/反序列化正文内容。

对于 ASP.Net Web API 2 和 ASP.Net Core Web API,JSON 格式化程序总是默认开启。对于默认的 ASP.Net Web API 项目,问题中的 POST 对我来说效果很好,但是如果删除 WebApiConfig.Register 中的 JSON 格式化程序,我可以重现您的问题:

config.Formatters.Remove(config.Formatters.JsonFormatter);

似乎您在取消注册JsonFormatter 的 Web API 配置中有类似的代码。如果不是这种情况,请在WebApiConfig.Register 中设置断点并检查config.Formatters 集合中的值是什么。这是JsonFormatter的默认列表:

如果由于某种原因JsonFormatter 在您的情况下会丢失,您可以显式注册它:

config.Formatters.Add(new JsonMediaTypeFormatter());

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2018-10-13
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多