假设我们有Create
和Edit
动作方法归于HttpPost
并且它们具有model
类型的参数,例如BlogViewModel
,如下所示。ModelState.IsValid = true是否保证传递的模型参数不为null?
[HttpPost]
public IActionResult Create(..., BlogViewModel model)
{
....
}
[HttpPost]
public IActionResult Edit(..., BlogViewModel model)
{
....
}
在他们的身体里,我们通常会做如下验证。
if(ModelState.IsValid)
{
// do something
}
在这里,do something
可以访问model
的性质的操作。
问题
我不知道是否有在这model
成为null
的可能性。如果model
是null
然后do something
(诸如访问的model
一个属性)将抛出异常。
我读了很多的例子(从互联网和教科书),我还没有看到有人这样做仔细检查尚未如下。
if(model!=null)
{
if(ModelState.IsValid)
{
// do something
}
}
或
if(ModelState.IsValid)
{
if(model!=null)
{
// do something
}
}
也许,条件ModelState.IsValid
是true
保证model
不null
。
我的假设是否正确?恐怕我正在做一个定时炸弹的假设。
该模型将只'null'如果有与您其他错误代码 –
@StephenMuecke:所以有必要总是做仔细检查所示我上面的代码?或'ModelState.IsValid = true'不能保证'model!= null'? –
无论如何,检查'null'通常是个好主意。假设它不应该是'null',一切进展顺利,但重构或其他错误配置(例如路由)可能会导致它为空。 – DiskJunky