Asp.net core ASP.NET核心:从jQuery发布复杂类型总是导致';空';模型
我正试图从jQuery发布到我的ASP.NET核心(RC1)API。当我通过HttpClient发布时,它工作得很好,所以我认为这只是我缺少的一件愚蠢的事情 我可以在一个普通默认的ASP.NET5项目和这段代码上重现我的问题 服务器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 {
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
头没有在这些请求中正确传输,这就是模型绑定不正确的原因