【发布时间】:2016-04-09 20:43:29
【问题描述】:
在将 JSON 模型发布到 WebAPI 控制器方法时,我注意到如果 JSON 模型中有空对象,模型绑定器将实例化这些项目,而不是在服务器端对象中将它们保持为空。
这与普通 MVC 控制器绑定数据的方式形成对比......如果对象在 JSON 中为空,它不会实例化一个对象。
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;
}
}
将被发布的模型类
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 操作将其保留为空。
在我看来,WebAPI 会以这种方式运行并不直观。为什么会这样做?我可以让它在这方面表现得像 MVC 动作吗?
【问题讨论】:
-
您的
Model不可能在其默认构造函数中构造Widget并将其分配给MyWidget,是吗? -
您使用的是什么版本的 Web API?
-
@dbc,没有这个类和你看到的完全一样。没有指定构造函数。此外,如果这是一个基于构造函数的问题,那么两个控制器都会发生这种情况。
-
@Nikolai,WebAPI 版本 2
标签: jquery json ajax asp.net-mvc asp.net-web-api