【问题标题】:Asp.net core api getting "415 Unsupported Media Type" error from Javascript, not PostmanAsp.net 核心 api 从 Javascript 中获取“415 Unsupported Media Type”错误,而不是 Postman
【发布时间】:2017-02-20 22:07:37
【问题描述】:

我创建了一个 Asp.Net Core Web 应用程序,并希望实现一个 Web API。

我已经实现了一个功能性的 HttpGet,现在正在尝试实现一个 HttpPost 函数:

    [HttpPost]
    public object Post([FromBody] object data)
    {            
        return null;
    }

我已经使用 Postman 对此进行了测试,效果很好。 我在正文中使用 json 对象设置它(设置为 raw 和 JSON (application/json))。

我得到了预期的响应。

但是当我尝试使用 Postman 建议的代码(或我自己的尝试)从 javascript 调用它时:

    var settings = {
      "async": true,
      "crossDomain": true,
      "url": "http://localhost:51139/api/data",
      "method": "POST",
      "headers": {
        "content-type": "application/json",
        "cache-control": "no-cache",
        "postman-token": "999ee8ee-4e92-acb8-b7cf-144ffa49e5ee"
      },
      "processData": false,
      "data": "{\"Message\":\"This is body data\"}"
    }

    $.ajax(settings).done(function (response) {
      console.log(response);
    });

我收到“415 不支持的媒体类型”错误。

有人知道我哪里出错了吗?

【问题讨论】:

  • 从哪里调用 javascript ?从一个页面?来自其他网站?
  • 我只是将它放在一个简单的 html 页面中,然后在浏览器中打开该页面。没有网络服务器或类似的东西。
  • 如果我从一个简单的网络服务器上的页面运行代码,我会得到相同的响应。

标签: javascript jquery asp.net-core


【解决方案1】:

我遇到了同样的问题,尝试了上百万种不同的组合($.ajax$.post 等),但最终是accepts: "application/json"

{
    type: "post",
    accepts: "application/json",
    url: "http://localhost:51139/api/data",
    contentType : "application/json",
    data: "{\"Message\":\"This is body data\"}"
}

【讨论】:

  • 正是这篇文章提醒我使用 contentType: "application/json"。那是为我做的。谢谢!!!!
  • @user1883961 太好了!很高兴它在某种程度上有所帮助! :)
【解决方案2】:

你可以试试这样的

[HttpPost]
public object Post()
{   
    Object o = Request.Form.First(o => o.Key == "data").Value 
    return null;
}

然后,如果您可以创建该对象的类,则可以使用 JsonConvert 将该对象反序列化为您创建的类对象。

【讨论】:

  • 我在尝试此操作时收到 'System.InvalidOperationException: 'Incorrect Content-Type: application/json'' 错误(对代码进行了少量更正)。
  • 尝试用 [Produces("application/json")] 装饰你的控制器。然后确保你已经制作了一个 C# 模型而不是使用泛型对象。这可能是由于.net 无法将您的模型与接收的内容绑定而失败。因此,回顾一下保持您的代码相同,但创建数据的 c# 模型并用 [Produces("application/json")] 装饰它。希望这会有所帮助
猜你喜欢
  • 1970-01-01
  • 2019-08-21
  • 2019-09-01
  • 2012-04-19
  • 2019-03-30
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
相关资源
最近更新 更多