假设我们有由 HttpPost
归因的 Create
和 Edit
操作方法,并且它们有一个 model
类型的参数,例如BlogViewModel
如下。
[HttpPost]
public IActionResult Create(..., BlogViewModel model)
{
....
}
[HttpPost]
public IActionResult Edit(..., BlogViewModel model)
{
....
}
在他们的体内,我们通常进行如下验证。
if(ModelState.IsValid)
{
// do something
}
这里,做某事
可以是访问模型
属性的操作。
问题
我不确定是否有可能model
变成null
。如果 model
为 null
,则执行某些操作
(例如访问 model
的属性)将引发异常。
我读了很多例子(来自互联网和教科书),我还没有看到有人做如下双重检查。
if(model!=null)
{
if(ModelState.IsValid)
{
// do something
}
}
或
if(ModelState.IsValid)
{
if(model!=null)
{
// do something
}
}
条件 ModelState.IsValid
为 true
可能保证 model
不 null
。
我的假设正确吗?恐怕我正在做一个定时炸弹的假设。
最佳答案
要回答您的问题,不,ModelState.IsValid 不会检查您的模型是否为空,如果发生这种情况,将会抛出错误。
在 API 中,如果您在构建请求模型时犯了错误并且它与端点期望的不匹配,则很容易出现空模型。
或者其他人可能会查看您的网站,查看 API 调用,并决定找点乐子,并用没有有效模型的请求淹没您的 API。
有多种方法可以在一个地方检查空模型,例如:ModelState is valid with null model
关于c# - ModelState.IsValid=true 是否保证传递的模型参数不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560452/