.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; } }