#问题简略介绍
Asp.net mvc在控制器Action的参数上做校验无效
#问题详细介绍
我使用Asp.net Mvc在控制器的方法的参数上打了一些数据注解,目的是对提交的参数进行数据校验,但是,无论是我用接口工具测试还是调试ModelState的IsValid属性始终为True,也就是校验通过。尽管我的数据不符合我的数据注解。后面我甚至法一个空的{}对象到接口,也是验证通过。仿佛数据注解打在Action参数上完全无效。
#我的代码如下
public JsonResult GetAuth([Required][StringLength(50, ErrorMessage = "字符长度应在6-50之间", MinimumLength = 6)] string token)
{
string msg = null;
if(ModelState.IsValid)
{
msg = "正确";
}
else
{
msg = "错误";
}
return Json(new Res() {code=20000,msg= msg });
}
用以上代码,我无论提交什么,ModelState.IsValid始终为True。
但是,如果我在Model层建立一个类,类里面封装一个Token字段,在Token字段上打注解,然后再把这个类作为以上GetAuth方法的参数,验证又完全正常了。
类的代码如下:
public class TestModel
{
[Required]
[StringLength(50, ErrorMessage = "字符长度应在6-50之间", MinimumLength = 6)]
public string Token { get; set; }
}
用TestModel类把参数进行封装后Action部分的代码如下:
public JsonResult GetAuth(TestModel testModel)
{
string msg = null;
if(ModelState.IsValid)
{
msg = "正确";
}
else
{
msg = "错误";
}
return Json(new Res() {code=20000,msg= msg });
}
我就是想问,难道不可以在Action上打注解来实现接口的参数校验吗?因为一个项目接口太多,我总不可能为每个接口都建立一个专门的类作为Action的入参。请问这个问题应该怎么解决,为什么不能在Action上打注解,还是我什么步骤没有做到位。
顺便提一句,web.config里面这两个关于校验的配置项我也加了:
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
顺便问一下各位大虾,你们是怎么做数据校验的