控制器方法接收 Ajax 发送的数据为 null

问题描述 投票:0回答:1

我有一个简单的控制器方法,希望接收一个字符串参数:

    public class ZTest : BaseController
    {
        [HttpPost]
        public async Task<ActionResult> Test(string msg)
            {
            // BREAKPOINT   msg is always null here
            return Json(ModelState.ToDataSourceResult());
            }
    }

基本的 Ajax 请求将数据发送到控制器方法:

            $.ajax({
                type: 'POST',
                url: '@Url.Action("Test", "ZTest")',
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({ msg: "Hello World" }),
                    success: function (data) {
                    if (data.exception) {
                        Swal.fire("Error", data.message, "error");
                    }
                    else {
                        Swal.fire("Success", "message", "success");
                    }
                }
            });

为什么这个简单的例子会失败?

我在尝试解决更复杂的示例时创建了这个简单的 MRE。

我尝试过添加和删除

[HttpPost]
装饰,在
string msg
变量前面添加
[FromBody]
,并删除 Ajax 属性
dataType
contentType

ajax asp.net-core
1个回答
0
投票

现在我们使用

contentType: "application/json; charset=utf-8"
,这意味着发送的JSON对象将绑定到C#中的对象(Message)。

这是我这边的测试代码

    [HttpPost]
    public IActionResult Test([FromBody] Message msg)
    {
        return Json(msg);
    }
    public class Message
    {
        public string? msg { get; set; }
    }

测试结果

© www.soinside.com 2019 - 2024. All rights reserved.