将JSON模型发布到WebAPI控制器方法时,我注意到如果JSON模型中有空对象,模型绑定器将实例化这些项,而不是在服务器端对象中保留它们.
这与普通MVC控制器如何绑定数据形成对比...... 如果对象在JSON中为null,则不会实例化对象.
MVC控制器
public class HomeController : Controller { [HttpPost] public ActionResult Test(Model model) { return Json(model); } }
WebAPI控制器
public class APIController : ApiController { [HttpPost] public Model Test(Model model) { return model; } }
将获得POST的模型类
public class Model { public int ID { get; set; } public Widget MyWidget { get; set; } }
Model类中使用的类
public class Widget { public int ID { get; set; } public string Name { get; set; } }
当我将JSON模型发布到每个控制器时,这是我的结果:
$.post('/Home/Test', { ID: 29, MyWidget: null }) //Results in: {"ID":29,"MyWidget":null} $.post('/api/api/Test', { ID: 29, MyWidget: null }) //Results in: {"ID":29,"MyWidget":{"ID":0,"Name":null}}
如您所见,WebAPI方法使用对象实例化MyWidget属性,而MVC操作将其保留为null.
对我来说,WebAPI以这种方式运行似乎并不直观.它为什么要这样做?在这方面,我可以使其表现得像MVC一样吗?