首页 >web前端 >js教程 >如何在 ASP.NET MVC 中将 JSON POST 数据作为对象传递给 Web API 方法?

如何在 ASP.NET MVC 中将 JSON POST 数据作为对象传递给 Web API 方法?

Barbara Streisand
Barbara Streisand原创
2024-11-08 05:37:02618浏览

How to Pass JSON POST Data to a Web API Method as an Object in ASP.NET MVC?

将 JSON POST 数据作为对象传递给 Web API 方法

在 ASP.NET MVC 中,通过 JSON 格式传递客户对象POST 请求可能会导致 POST 方法的客户参数出现空值。此问题是由于浏览器使用的默认 Content-Type 为“application/x-www-form-urlencoded”而导致的。

解决方案

纠正问题,必须在 POST 请求中将 Content-Type 标头设置为“application/json”。这可以通过在请求标头中使用 Content-Type: "application/json" 来实现,如下所示:

$(function () {
    var customer = {contact_name :"Scott",company_name:"HP"};
    $.ajax({
        type: "POST",
        data :JSON.stringify(customer),
        url: "api/Customer",
        contentType: "application/json"
    });
});

通过将 Content-Type 指定为“application/json”,模型binder 会准确识别 JSON 数据并将其绑定到相应的类对象。

传递复杂对象

如果Web API 方法参数是一个复杂的对象,例如:

public class CustomerViewModel {
    public int Id {get; set;}
    public string Name {get; set;}
    public List<TagViewModel> Tags {get; set;}
}

要从客户端发送此对象,可以使用以下代码:

//Build an object which matches the structure of our view model class
var model = {
    Name: "Shyju",
    Id: 123,
    Tags: [{ Id: 12, Code: "C" }, { Id: 33, Code: "Swift" }]
};

$.ajax({
    type: "POST",
    data: JSON.stringify(model),
    url: "../product/save",
    contentType: "application/json"
}).done(function(res) {       
    console.log('res', res);
    // Do something with the result :)
});

确保 [FromBody] 属性

Web API 方法参数必须用 [FromBody] 属性修饰才能启用模型来自请求正文的绑定。如果省略此属性,则平面属性将正确绑定,但复杂属性将保留为空。

[HttpPost]
public CustomerViewModel Save([FromBody] CustomerViewModel m)
{
    return m;
}

以上是如何在 ASP.NET MVC 中将 JSON POST 数据作为对象传递给 Web API 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn