AJAX post数据到达ASP.NET Core 2.1控制器时为空

Cod*_*841 2 c# ajax jquery post asp.net-core

我使用以下 jQuery 代码将数据发布到 ASP.NET Core MVC 2.1.2 页面:

function OnCountryChange() {
    $.ajax({
        url: "/OnCountryChange",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        headers: {
            "RequestVerificationToken": $('input[name = __RequestVerificationToken]').val()
        },
        data: JSON.stringify({
            sCountryCode: "Test 123"
        })
    });
}
Run Code Online (Sandbox Code Playgroud)

我用这种方法在控制器中收到帖子:

[HttpPost]
[ValidateAntiForgeryToken]
[Route("/OnCountryChange")]
public IActionResult OnCountryChange([FromBody] string sCountryCode)
{
    logger.LogDebug($"Country code is: {sCountryCode ?? "null"}");

    return Json(sCountryCode);
}
Run Code Online (Sandbox Code Playgroud)

打印到日志的输出是:

国家/地区代码为:空

原始请求正文(使用 Fiddler 查看)如下所示:

{"sCountryCode":"Test 123"}
Run Code Online (Sandbox Code Playgroud)

为什么数据传不出去?

luc*_*umt 6

我不熟悉C#,但在你的问题中你添加了

contentType: "application/json; charset=utf-8"
Run Code Online (Sandbox Code Playgroud)

在您的Ajax方法中,这意味着数据参数是json格式,因此您需要作为json对象访问,而不是直接访问字符串。

解决方法有两种:

A。更改控制器方法以像对象C#一样访问json

b. 发送Ajax参数不带json,代码类似如下:

function OnCountryChange() {
    $.ajax({
        url: "/OnCountryChange",
        type: "POST",
        datatype: "json",
        headers: {
            "RequestVerificationToken": $('input[name = __RequestVerificationToken]').val()
        },
        data: {sCountryCode: "Test 123"}
    });
}
Run Code Online (Sandbox Code Playgroud)

  • @exInt AJAX 可以工作,只需更改 C# 方法,如下所示:`public JObject OnCountryChange([FromBody] JObject joRequest)` (2认同)