我想通过一个正则表达式验证器拦截在表单字段中的“<”字符。 我将描述在3个步骤的问题:
第1步 :当我尝试提交表单包含了“<”字符的字段,我得到的“潜在危险的请求......” -如预期在ASP.NET。
第2步 :为了避免ASP.NET的RequestValidation,我装修我的更新方法在控制器“[ValidateInput(假)”。
它按预期工作 - 现在我可以张贴“<”没有错误的字符。
第3步 :我用XVAL与DataAnnotations。 例如,[必需]或[StringLength(255)]按预期工作。
但是当我使用:正则表达式 ( “^ [^ <>] * $”的ErrorMessage = “特殊字符是不允许的。”), 我又得到了“可能dangeros的请求......”的错误 ,尽管[ValidateInput (假)]指令。
发生了什么? 是否有正则表达式validaton一个简单的方法,但用[ValidateInput(假)的地方吗? 当然,我希望有我的验证代码的模式,而不是在控制器中。
不,这是在MVC 1 + XVAL的问题。 在MVC 2的验证的工作原理像预想的那样(而且也没有必要再XVAL) - Alex42
看起来像机器人不断推动这一个顶部仍。 你可能标志着一个答案,接受这样它才能知道?
我使用XVAL&nhibernate.validator,我试图重现此行为,但因为验证器捆绑到客户端我不能让过去的客户端验证的值。 当我禁用了JavaScript,它到了服务器端验证,并通过正则表达式验证捕获。
我想同样的事情用数据说明验证属性和模型的粘合剂和它使人们过去为好。
一定有别的事情上,导致该错误。 抱歉,我不能提供更多的帮助!
尝试使用一个简单的规则验证这种方法 。 这至少可以从公式消除XVAL。 如果那么问题仍然存在,我建议它涉及到两种:
- MVC的默认模型绑定的实现
- 或存在释放与MVC视图引擎发生问题,您使用以某种方式允许例外您通过验证指定的属性要进行的
<
当shoudn't是
如果它只是一个领域,你可以只写一个程序来寻找一个字符“<或>”,并删除它。 您可以通过利用字符串来实现这一目标。 希望这这有助于
- 使用For循环到文本的长度进行测试(对于(INT I = 1,I <= text.length,++))
- 验证每个字符begining 1(例如CH = text.substring(I,1)
- 添加每个读字符TMP的字符串除了“<或>”
我想静态方法Escape()
会解决这个给你。
Regex r = new Regex(Regex.Escape(expression));
把在web.config中这一行
<httpRuntime requestValidationMode="2.0" />
这是ASPNET 4.0变化
文章来源: ASP.NET MVC ValidateInput(false) stops working with xVal and [RegularExpression] DataAnnotation