ASP.NET 视ValidateInput(false)停止工作与xVal和[RegularExpression]DataAnnotation
-
10-07-2019 - |
题
我想拦截"<"字形式领域的regex验证程序。我将描述的问题在3个步骤:
步骤1:当我试图提交形式与一个领域包含"<"字,我获得"具有潜在危险要求..."-如预期的那样在ASP.NET.
步骤2:为了避免ASP.NET's RequestValidation,我装饰我更新方法在控制器"[ValidateInput(false)]".
它可以作为预期的-现在我可以发布"<"字没有错误。
步骤3:我用xVal与DataAnnotations.例如,[需要]或[StringLength(255)]按预期工作。
但是,当我使用:[RegularExpression("^[^<>]*$",错误消息="特殊的人物都是不允许的。")], 我得到"可能dangeros请求..."再次错误, 尽管[ValidateInput(false)]指令。
发生什么事了?是有一个简单的方法对regex validaton,但与[ValidateInput(false)]在的地方吗?当然,我想我的验证码模型中的不在控制器。
解决方案
不,这是MVC 1 + xVal中的一个问题。 在MVC 2中,验证工作为 假设(并且不需要xVal 再见)<!>#8211; Alex42
看起来机器人继续把这个推到顶端。你能否将答案标记为已接受,以便知道?
其他提示
我正在使用xVal <!>放大器; nhibernate.validator,我试图重现这种行为,但因为验证器绑定到客户端,我无法获得超过客户端验证的值。当我禁用javascript时,它进入服务器端验证,并被正则表达式验证器捕获。
我使用数据注释验证属性和模型绑定器尝试了同样的事情,它也使它过去了。
必然会有其他事情导致错误。对不起,我无法提供帮助!
尝试验采用简单的规则 这种方法.这至少可以消除xVal从公式。如果该问题仍然存在,我建议是相关的:
- 执行视的默认型的粘合剂
- 或者还有一个问题与视查发动机在释放你的使用那就是以某种方式允许例外作出的属性规定通过验证
<
当它可千万别
如果这只是一场,你可能只是写一个例行程序来寻找一个字< 或>',并将其删除。你可以实现这一目标,通过使用子串。希望这可以帮助
- 使用环路的长度的案文是进行测试(for(int i=1,i <=文本。长,++))
- 验证每个字开始,1(e。g ch=文本。substring(i,1)
- 添加的每个字符读到tmp串除了'< 或>'
我想静态方法Escape()
会为你解决这个问题。
Regex r = new Regex(Regex.Escape(expression));
将此行放在web.config
中<httpRuntime requestValidationMode="2.0" />
这是ASPNET 4.0的变化