如何将 JSON 字符串从 AJAX 调用传递到 .Net Core 控制器操作?

How do you pass a JSON string from an AJAX call to a .Net Core controller action?

提问人:B. Jones 提问时间:10/9/2023 最后编辑:Qing GuoB. Jones 更新时间:10/9/2023 访问量:53

问:

我已经阅读了几个这样的例子,但就是无法让它工作。我正在尝试将 json 数据传递给 .Net Core 控制器操作,并且该值在我的操作方法中始终为 null。我已经尝试了多种变体,但似乎没有任何效果。在此示例中,我将 places 设置为文本,以确保我尝试传递有效的 JSON。

Javascript的:

function GetRatedPlaces(places) {
            places = { name: "John", age: 30, city: "New York" };
            var placesJson = JSON.stringify(places);
            console.log(placesJson);
            $.ajax({
                type: 'POST',
                url: '@Url.Action("GetRatedPlaces", "Home")',
                contentType: 'application/json',
                data: placesJson,
                cache: false,
                success: function (result) {
                    // Handle the response from the controller
                }
            });
        }

控制器操作:

 [HttpPost]
        public IActionResult GetRatedPlaces([FromBody] string places)
        {
            // Deserialize places here.

            return Ok();
        }
javascript ajax asp.net-mvc asp.net-core

评论

0赞 Qing Guo 10/9/2023
你的地方是典范吗?
0赞 Mark Seemann 10/9/2023
通常,问题出在 AJAX 代码或 C# 代码上。隔离问题通常很有帮助。查看 HTTP 请求。HTTP 请求看起来是否正确?那么问题很可能出在服务器端。如果不是,则问题可能出在 AJAX 上。隔离问题后,请编辑问题以包含最小的可重现示例POST
0赞 B. Jones 10/10/2023
@QingGuo我试图只用一根绳子来做到这一点。没有模型。

答:

1赞 Qing Guo 10/9/2023 #1

第一种方法:尝试创建一个模型:

public class Places
{
    public string name { get; set; }
    public int age { get; set; }
    public string city { get; set; }
}

然后:

[HttpPost]
public IActionResult GetRatedPlaces([FromBody]Places places)
{
    // Deserialize places here.

    return Ok();
}

结果:enter image description here

第二种方式:您可以尝试以下代码:

function GetRatedPlaces(places) {
            places = { name: "John", age: 30, city: "New York" };
            var placesJson = JSON.stringify(places);
            console.log(placesJson);
            $.ajax({
                type: 'POST',
                url: '@Url.Action("GetRatedPlaces", "Home")',
               
                data: places,
                
                success: function (result) {
                    // Handle the response from the controller
                }
            });
        }

该操作设置用于绑定数据的参数:

[HttpPost]
public IActionResult GetRatedPlaces( string name,int age,string city)
{
    // Deserialize places here.

    return Ok();
}

结果:

enter image description here

评论

0赞 B. Jones 10/10/2023
我明白我做错了什么。谢谢@qingguo。
0赞 Qing Guo 10/10/2023
嗨,琼斯@B,不客气:) 有什么更新吗?如果我的回答能帮助您解决问题,您能接受答案吗?如果没有,你能跟进让我知道吗?请参阅:如何获取答案 非常感谢。
0赞 B. Jones 10/10/2023
@Qing郭 那处理好了。我仍在整理一些细节,但这个解释确实有帮助。