C#/.Net

WebApi或Asp.Net MVC中参数验证无效

问题

看下下边的代码,[Range(10, 20)]这个验证在这里永远不会生效,本文的目的就是让他生效。


接下来详细说明一下这种情况:
在.net下Webapi项目中如果使用到了任何ValidationAttribute(包括StringLengthAttribute,RangeAttribute,Required等等)作为URL参数验证,则不会有效果,无论是原有的还是自己继承后的都不生效;这个验证只有在封装好的Model中才会生效,先看如下代码:

ValuesController

ValidateModel


方法一返回结果:


方法二返回结果:


方法三返回结果:


在这里虽然一个方法是GET,另一个是POST,但是经过测试请求类型不改变测试结果。

从结果上看,只有方法二是触发了ValidationAttribute,但是ValidationAttribute特性是可以用于方法参数的(如下图);

也就是说:在.Net WebApi底层的架构里并没有触发Parameter的验证特性,只触发了Property的验证特性(可能也包含Field,未验证)
(MVC与WebApi是同样的情况)

不知.Net此种做法的目的是什么,还是接着看如何修复吧。

解决方案

在原来的ValuesController里新加如下:

ValidateParameter

返回结果:

解决思路就是在方法执行前主动获取请求的参数,并取得参数中有关ValidationAttribute特性的集合,并手动验证,最后将错误信息添加至HttpActionContext.ModelState,这样即可解决WebApi或者Asp.Net MVC中ValidationAttribute无法在参数上生效的问题。

感谢:https://blog.markvincze.com/how-to-validate-action-parameters-with-dataannotation-attributes/

.
.
.
.
.
.
.
.
.

【本文章出自NM1024.com,转载请注明作者出处。】

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据