[ValidateModel] 和 ASP.NET 中的有效状态检查有什么区别?

What is the difference between [ValidateModel] and a check of valid state in ASP.NET?

我看到一些用于模型验证的代码:

 [ValidateModel]

和其他代码,例如使用它进行模型验证的示例 WebAPI:

  if (!ModelState.IsValid)
  {
     return BadRequest(ModelState);
  }

任何人都可以解释有什么区别以及为什么 Microsoft 的示例 WebAPI 应用程序不只是使用 [ValidateModel] 吗?

您确定 [ValidateModel] 属性开箱即用吗?因为 according to this link 它是自定义属性,有助于使代码更清晰一些,因为您可以在控制器中省略 ModelState.IsValid 语句,因为如果动作实现了,它的模型数据已经有效。我浏览了互联网,所有 [ValidateModel] 实现都有类似的 ModelState.IsValid 代码语句:

public class ValidateModelAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            if (actionContext.ModelState.IsValid == false)
            {
                actionContext.Response = actionContext.Request.CreateErrorResponse(
                    HttpStatusCode.BadRequest, actionContext.ModelState);
            }
        }
    }

我不确定,但我认为,因为 [ValidateModel] 是自定义属性,需要额外的 space 来解释和实现,所以大多数教程更喜欢开箱即用 ModelState.IsValid .