.Net Core 2.0/2.1 环境下,Ajax Post 后台Action接收到的参数为 null
JS:
<script type="text/javascript">
function submitForm() {
var da = JSON.stringify({
loginId: '1',
password: '2'
});
$.ajax({
type: 'POST',
url: '/Home/LoginAsync',
dataType: 'json',
contentType: 'application/json',
data: da,
error: function (XMLHttpRequest) {
alert('post error!');
},
success: function (data) {
alert(data.result);
}
});
}
</script>
后台:
[HttpPost] public IActionResult LoginAsync(string loginId, string password) { if(loginId != null && password != null) return Json(new { result = "OK" }); else return Json(new { result = "Is Null" }); }
后台接收不到参数 loginId 和 password 都为 null, 如果把js里把post改成get,后台能接收到参数。.Net Core 2.0/2.1 都是这样,同样的代码在.net framework 4.6 下正常。
需要为 Action 的参数定义一个类或者使用 dynamic
把参数定义了一个类,参数info不为null了,但里面的loginid,password仍然为 null
@大豆男生: 你能不能把属性设置成public
@大豆男生: 给 Action 参数加上[FromBody]
@dudu: @MrNice:
加上 [FromBody],属性改为 public 就可以了。.net core 真是有很大不同。多谢了
用 dynamic 或 类 LoginInfo 都可以:
[HttpPost] public IActionResult LoginAsync([FromBody]dynamic info) { if (info != null) { string loginId = info.LoginId; string password = info.Password; return Json(new { result = "OK" }); } else { return Json(new { result = "Is Null" }); } } public class LoginInfo { public string LoginId { get; set; } public string Password { get; set; } }