ASP .NET CORE简单参数验证

时间:2018-08-20 08:58:21

标签: c# validation asp.net-core

我已经在一些API中实现了模型验证,但是我想知道是否可以使用简单参数上的属性进行一些验证,例如:

[HttpGet("test/{type}")]
public ActionResult  GetSomeData([Range(0,2)]byte type)
{
  if (!ModelState.IsValid)
  {
    // isValid is always TRUE
  }
  ...
}

调用/ controller / test / 4时,IsValid始终为TRUE。

有一种干净的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

您可以创建一个自定义过滤器属性来指示MVC管道进行验证:

[HttpGet("test/{type}")]
[ValidateActionParameters]
public ActionResult GetSomeData([Range(0, 2)]byte type)
{
    if (!ModelState.IsValid)
    {
       // isValid has correct value
    }
}

然后将其添加到操作中:

limitedInsert

答案 1 :(得分:1)

从2.1版开始,此功能现已可用。像在模型上一样,在调用ModelState.IsValid时也将遵守操作参数上的数据注释。

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.1#top-level-node-validation

如果您使用ApiController属性注释您的班级,验证也将自动执行,并且将返回400错误请求,其中包含无效数据的详细信息,而无需您自己致电ModelState.IsValid。 / p>

https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#automatic-http-400-responses