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

时间:2015-11-06 15:03:14

标签: asp.net asp.net-mvc asp.net-web-api asp.net-web-api2

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

 [ValidateModel]

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

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

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

1 个答案:

答案 0 :(得分:5)

您确定自己拥有[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]是自定义属性,需要额外的空间来解释和实现,所以大多数教程都喜欢开箱即用的ModelState.IsValid