我已经在一些API中实现了模型验证,但是我想知道是否可以使用简单参数上的属性进行一些验证,例如:
[HttpGet("test/{type}")]
public ActionResult GetSomeData([Range(0,2)]byte type)
{
if (!ModelState.IsValid)
{
// isValid is always TRUE
}
...
}
调用/ controller / test / 4时,IsValid始终为TRUE。
有一种干净的方法吗?
谢谢!
答案 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
时也将遵守操作参数上的数据注释。
如果您使用ApiController
属性注释您的班级,验证也将自动执行,并且将返回400错误请求,其中包含无效数据的详细信息,而无需您自己致电ModelState.IsValid
。 / p>