首页 新闻 会员 周边

.Net Core 2.0/2.1 Ajax Post,后台Action接收到的参数为 null

0
悬赏园豆:10 [已解决问题] 解决于 2018-06-26 20:48

.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 下正常。

大豆男生的主页 大豆男生 | 小虾三级 | 园豆:608
提问于:2018-06-26 18:16
< >
分享
最佳答案
1

需要为 Action 的参数定义一个类或者使用 dynamic

收获园豆:10
dudu | 高人七级 |园豆:30943 | 2018-06-26 18:19

把参数定义了一个类,参数info不为null了,但里面的loginid,password仍然为 null

大豆男生 | 园豆:608 (小虾三级) | 2018-06-26 18:41

@大豆男生: 你能不能把属性设置成public

MrNice | 园豆:3450 (老鸟四级) | 2018-06-26 18:58

@大豆男生: 给 Action 参数加上[FromBody]

dudu | 园豆:30943 (高人七级) | 2018-06-26 18:58

@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; }
}
大豆男生 | 园豆:608 (小虾三级) | 2018-06-26 20:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册