c# - ModelState.IsValid=true 是否保证传递的模型参数不为空?

标签 c# asp.net-mvc asp.net-core-mvc

假设我们有由 HttpPost 归因的 CreateEdit 操作方法,并且它们有一个 model类型的参数,例如BlogViewModel如下。

[HttpPost]
public IActionResult Create(..., BlogViewModel model)
{
....
}

[HttpPost]
public IActionResult Edit(..., BlogViewModel model)
{
....
}

在他们的体内,我们通常进行如下验证。

if(ModelState.IsValid)
{
// do something 
}

这里,做某事可以是访问模型属性的操作。

问题

我不确定是否有可能model变成null。如果 modelnull,则执行某些操作(例如访问 model 的属性)将引发异常。

我读了很多例子(来自互联网和教科书),我还没有看到有人做如下双重检查。

if(model!=null)
{
    if(ModelState.IsValid)
    {
    // do something
    }
}

if(ModelState.IsValid)
{
    if(model!=null)
    {
    // do something
    }
}

条件 ModelState.IsValidtrue 可能保证 modelnull

我的假设正确吗?恐怕我正在做一个定时炸弹的假设。

最佳答案

要回答您的问题,不,ModelState.IsValid 不会检查您的模型是否为空,如果发生这种情况,将会抛出错误。

在 API 中,如果您在构建请求模型时犯了错误并且它与端点期望的不匹配,则很容易出现空模型。

或者其他人可能会查看您的网站,查看 API 调用,并决定找点乐子,并用没有有效模型的请求淹没您的 API。

有多种方法可以在一个地方检查空模型,例如:ModelState is valid with null model

关于c# - ModelState.IsValid=true 是否保证传递的模型参数不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560452/

相关文章:

c# - 如何比较 Sharepoint 列表项值?

c# - 正确使用 Marshal.Copy

c# - IIS 和 IIS Express 在本地为 MVC4 Azure 应用程序引发 403 错误

c# - Kendo Grid 中的字典动态绑定(bind)

c# - 将 View 和 Controller 放在与 ASP.NET Core Web 应用程序不同的项目中

c# - 旋转面魔方C#

c# - 太多 if (obj is thisObj) 语句

c# - N 层 WCF 应用程序中的 SignalR

cookies - 在 docker 镜像启动之间保留 ASP.NET Core auth cookies

html - 需要用参数设置div的背景