jQuery ajax POST字符串参数,MVC操作方法获取null

Xia*_*Han 1 ajax asp.net-mvc jquery asp.net-core-mvc asp.net-core-2.0

我已经在网上看到很多关于此类问题的文章,并尝试了不同的方法,例如JSON.stringify参数,但是它们都不适用于我的情况。

我认为这应该是一种非常简单直接的编码体验。但是无法弄清楚我做错了什么。

这是我的JQuery代码:

$(document).ready(function () {
    $('#SendEmails').click(function () {
        var emails = $("#EmailList").val();     

        $.ajax({
            url: '/Requests/SendEmails',
            type: "POST",
            data: { 'emails': emails },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                alert(response.responseText);
            },
            error: function (response) {
                alert(response.responseText);
            },
            failure: function (response) {
                alert(response.responseText);
            }
        })
    })
})
Run Code Online (Sandbox Code Playgroud)

我的动作方法就像:

[HttpPost]
public string SendEmails(string emails)
{
    return "Good";
}
Run Code Online (Sandbox Code Playgroud)

在调试代码时,我总是在操作方法中得到null。

但是,如果我将网址更改为:

url: '/Requests/SendEmails?emails=' + emails,
Run Code Online (Sandbox Code Playgroud)

并删除

data: { 'emails': emails },
Run Code Online (Sandbox Code Playgroud)

它会工作。

任何人都可以指出原始代码有什么问题吗?我认为.Net Core 2.x不应该有什么不同吗?

谢谢。

Xia*_*Han 8

最后,在尝试了许多组合之后,我发现以下代码在更改后可以正常工作:

  1. 使变量JSON.stringify
  2. 在操作方法中添加[FromBody]

感谢Arunraja的技巧,[FromBody]是必须从主体读取字符串类型参数的必需项。

$(document).ready(function () {
    $('#SendEmails').click(function () {
        var emails = $("#EmailList").val();     

        $.ajax({
            url: '/Requests/SendEmails',
            type: "POST",
            data: JSON.stringify(emails),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                alert(response.responseText);
            },
            error: function (response) {
                alert(response.responseText);
            },
            failure: function (response) {
                alert(response.responseText);
            }
        })
    })
})

[HttpPost]
public string SendEmails([FromBody]string emails)
{
    return "Good";
}
Run Code Online (Sandbox Code Playgroud)