【问题标题】:ASP.NET Core: POSTing complex type from jQuery always results in 'null' modelASP.NET Core:从 jQuery 发布复杂类型总是导致“空”模型
【发布时间】:2016-02-16 15:06:29
【问题描述】:

我正在尝试从 jQuery 发布到我的 ASP.NET Core (RC1) API。当我通过 HttpClient 发布时它工作正常,所以我认为这只是我错过的一件愚蠢的事情。

我可以在 vanilla 默认 ASP.NET 5 项目和此代码上重现我的问题。

服务器

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpPost]
        public IActionResult Post([FromBody]Model input)
        {
            // input is always null

            return Json(input.Value);
        }


        public class Model
        {
            public string Value { get; set; }
        }
    }
}

客户

$.ajax({
    url: "http://localhost:5000/api/values",
    method: "POST",
    contentType: "application/json",
    dataType: "json",
    data: JSON.stringify({
        Value: "some_value"
    })
}).done(function(data) {
    console.log("Done.", data);                         
});  

我通过删除[FromBody] 进行了尝试,它返回了一个模型,但从未填充过属性。对于 SO 上的类似问题,我还尝试了许多解决方案和解决方法,但我认为它们不适用于 .NET Core 或仅解决使用[FromBody] 和简单类型的问题。例如Web Api Parameter always nullusing jQuery post to ASP.Net webapihttp://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    我又花了几个小时才终于弄明白。正如我担心/希望的那样,这只是一件愚蠢的事情:

    Fiddler 发现我的 CORS 配置存在小问题。意识到我在 Chrome 中完全禁用了 CORS,它突然开始工作。服务器端代码按原样工作,这是最小的工作客户端代码:

    $.ajax({
        url: "http://localhost:5000/api/values",
        method: "POST",
        contentType: "application/json",
        data: JSON.stringify({
            value: "some_value"
        })
    }).done(function(data) {
        console.log("Done.", data);                         
    });  
    

    请注意contentType 是必需的,没有它,模型绑定将无法工作。

    当然,我之前尝试过这个客户端代码,但是 CORS 把它搞砸了:CORS 有一个 OPTION 请求来确定请求是否有效。浏览器 F12 工具并没有使这一点变得应有的明显。有趣的是,我在调试器中收到了 OPTION 请求(这就是我认为它有效的原因),但我最终通过 Fiddler 发现 contentType 标头在这些请求中未正确传输 - 这就是模型未正确绑定的原因。

    【讨论】:

      猜你喜欢
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      相关资源
      最近更新 更多