Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AJAX post数据到达ASP.NET Core 2.1控制器时为空_C#_Jquery_Ajax_Post_Asp.net Core - Fatal编程技术网

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

C# AJAX post数据到达ASP.NET Core 2.1控制器时为空,c#,jquery,ajax,post,asp.net-core,C#,Jquery,Ajax,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: {

我正在使用以下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);
}
打印到日志的输出为:

国家代码为:空

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

{"sCountryCode":"Test 123"}

为什么没有传递数据?

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

contentType: "application/json; charset=utf-8"
在您的
Ajax
方法中,这意味着数据参数是
json
格式,因此您需要作为
json
对象访问,而不是直接访问字符串

有两种解决方法:

a。将
C#
controller方法更改为像
json
对象一样访问

b。发送不带
json
Ajax
参数,代码如下:

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

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

contentType: "application/json; charset=utf-8"
在您的
Ajax
方法中,这意味着数据参数是
json
格式,因此您需要作为
json
对象访问,而不是直接访问字符串

有两种解决方法:

a。将
C#
controller方法更改为像
json
对象一样访问

b。发送不带
json
Ajax
参数,代码如下:

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

谢谢将控制器方法中的字符串更改为JObject有效。@Coder6841很高兴能帮助您@代码6841我的解决方案中有完全相同的问题。我有完全相同的国家下拉AJAX调用,以获得基于国家的州。你能分享你最后的工作代码吗?@退出AJAX工作,只是C方法需要这样更改:
publicjobject-OnCountryChange([FromBody]JObject-joRequest)
谢谢!将控制器方法中的字符串更改为JObject有效。@Coder6841很高兴能帮助您@代码6841我的解决方案中有完全相同的问题。我有完全相同的国家下拉AJAX调用,以获得基于国家的州。你能分享你最后的工作代码吗?@退出AJAX工作,只需像这样更改C方法:
public-JObject-OnCountryChange([FromBody]JObject-joRequest)