将 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中文网其他相关文章!