使用 application/json 在 ASP.NET Core MVC 上进行 jQuery ajax post 请求

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

我正在尝试使用 jQuery.ajax 和

contentType: 'application/json; charset=utf-8'
进行 ajax 调用。

我使用 .NET 8 为 ASP.NET Core MVC 创建了一个新项目。

这是Javascript代码:

$('#addPerson').click(function () {
    var person = {
        Name: 'Test1',
        Email: 'Test2'
    };

    $.ajax({
        url: '@Url.Action("AddPerson")',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({ person: person }),
        // data: { person: person },
        type: 'Post',
        success: function (data) {
            
        }
    });
});

这是控制器方法和模型:

[HttpPost]
public IActionResult AddPerson(Person person)
{
    return Ok();
}

public class Person
{
    public string Name { get; set; }
    public string Email { get; set; }
}

由于某种原因,此人的属性始终为空。

如果我在 ajax 调用中评论下面显示的行

contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ person: person }),

并取消注释下面显示的行,然后我可以看到控制器中正确填充的属性。

// data: { person: person },

此外,如果我在控制器参数中添加

[FromBody]
并将数据更改为
JSON.stringify(person)
,它仍然有效,但我不希望这样,因为在很多情况下我可能需要向控制器发送整个人对象,然后发送附加参数.

在 ASP.NET MVC 的早期版本中,我相信这是有效的。我的猜测是我必须在

program.cs
中指定一个序列化器才能使其工作。但我尝试了不同的变体但没有成功。

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

您可以使用 NuGetpackage 中的 JObject 并使用命名空间“Newtonsoft.Json.Linq”,但您仍然可能想使用 [FromBody] 属性:

public IActionResult AddPerson([FromBody] JObject objRequest)
{
    Person person = JsonConvert.DeserializeObject<Person>(objRequest.ToString());
    string phone = objRequest.Value<string>("phone");  // additional field extraction
    // you can add any other fields to objRequest (Request Body) and only those matching fields will be automatically bind to Person object
    return Ok();
}
© www.soinside.com 2019 - 2024. All rights reserved.