Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.NET核心:从jQuery发布复杂类型总是导致';空';模型_Asp.net Core - Fatal编程技术网

Asp.net core ASP.NET核心:从jQuery发布复杂类型总是导致';空';模型

Asp.net core ASP.NET核心:从jQuery发布复杂类型总是导致';空';模型,asp.net-core,Asp.net Core,我正试图从jQuery发布到我的ASP.NET核心(RC1)API。当我通过HttpClient发布时,它工作得很好,所以我认为这只是我缺少的一件愚蠢的事情 我可以在一个普通默认的ASP.NET5项目和这段代码上重现我的问题 服务器 namespace WebApplication1.Controllers { [Route("api/[controller]")] public class ValuesController : Controller {

我正试图从jQuery发布到我的ASP.NET核心(RC1)API。当我通过HttpClient发布时,它工作得很好,所以我认为这只是我缺少的一件愚蠢的事情

我可以在一个普通默认的ASP.NET5项目和这段代码上重现我的问题

服务器

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]
来进行操作,但从未填充属性。我也尝试了许多类似问题的解决方案和变通方法,但我认为它们不适用于.NET Core,或者只使用inf
[FromBody]
和简单类型来解决问题。例如,我又花了几个小时,直到我最终找到答案。正如我所担心/希望的那样,这只是一件愚蠢的事情:

费德勒发现我的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
是必需的,没有它modelbinding将无法工作

当然,我以前也尝试过这个客户端代码,但是CORS失败了:CORS有一个选项请求来确定请求是否有效。浏览器F12工具并没有让这一点变得如此明显。有趣的是,我在调试器中收到了选项请求(这就是我认为它有效的原因),但我最终通过Fiddler发现,
contentType
头没有在这些请求中正确传输,这就是模型绑定不正确的原因