【问题标题】:AJAX post data is null when it reaches the ASP.NET Core 2.1 controllerAJAX 发布数据到达 ASP.NET Core 2.1 控制器时为空
【发布时间】:2018-12-22 12:16:57
【问题描述】:

我正在使用此 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"
        })
    });
}

我正在使用这种方法在控制器中接收帖子:

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

    return Json(sCountryCode);
}

打印到日志的输出是:

国家代码为:null

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

{"sCountryCode":"Test 123"}

为什么没有传递数据?

【问题讨论】:

    标签: c# jquery ajax post asp.net-core


    【解决方案1】:

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

    contentType: "application/json; charset=utf-8"
    

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

    两种方法解决:

    一个。将您的 C# 控制器方法更改为像 json 对象一样访问

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

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

    【讨论】:

    • 谢谢!将控制器方法中的字符串更改为 JObject 有效。
    • @Coder6841 很高兴为您提供帮助!
    • @Coder6841 我的解决方案中有完全相同的问题。我有完全相同的国家下拉 AJAX 调用,以获取基于国家的状态。你能分享你的最终工作代码吗?
    • @exInt AJAX 可以工作,只是需要像这样更改 C# 方法:public JObject OnCountryChange([FromBody] JObject joRequest)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多