ASP.NET MVC ValidateInput(false)停止使用xVal和[RegularExpression] DataAnnotation

时间:2009-06-24 12:38:23

标签: asp.net-mvc validation data-annotations xval

我想拦截“<”正则表达式验证器在表单字段中的字符。我将分三个步骤描述问题:

第1步:当我尝试提交包含“<”字段的表单时我得到了“潜在的危险请求......” - 正如ASP.NET中预期的那样。

第2步:为了避免ASP.NET的RequestValidation,我使用“[ValidateInput(false)]”在控制器中修饰我的Update方法。

按预期工作 - 现在我可以发布“<”字符没有错误。

第3步:我将xVal与DataAnnotations一起使用。例如,[Required]或[StringLength(255)]按预期工作。

但是当我使用时: [RegularExpression (“^ [^&lt;&gt;] * $”,ErrorMessage =“不允许使用特殊字符。”)],我再次收到“潜在危险请求...”错误< / strong>,尽管有[ValidateInput(false)]指令。

发生了什么事?有没有更简单的正则表达式验证方法,但是[ValidateInput(false)]到位了吗?当然,我想在模型中使用验证码,而不是在控制器中。

6 个答案:

答案 0 :(得分:0)

我正在使用xVal&amp; nhibernate.validator,我试图重现这种行为,但因为验证器绑定到客户端,我无法获得超过客户端验证的值。当我禁用javascript时,它进入服务器端验证,并被正则表达式验证器捕获。

我使用数据注释验证属性和模型绑定器尝试了同样的事情,它也使它过去了。

必然会有其他事情导致错误。对不起,我无法提供帮助!

答案 1 :(得分:0)

尝试使用this method的简单规则进行验证。这至少可以从等式中消除xVal。如果问题仍然存在,那么我建议它与之相关:

  • MVC默认模型Binder的实现
  • 或者您使用的版本中的MVC视图引擎存在问题,以某种方式允许通过验证<时指定的属性进行例外处理

答案 2 :(得分:0)

如果它只是一个字段,你可以写一个例程来寻找一个字符'&lt;或者&gt;'并删除它。你可以通过使用子串来实现这一点。希望这有助于

  • 使用For循环到要测试的文本的长度(for(int i = 1,i&lt; = text.length,++))
  • 验证每个字符开始1(例如ch = text.substring(i,1)
  • 将每个读取字符添加到tmp字符串,但“&lt;或&gt;'

答案 3 :(得分:0)

我想静态方法Escape()可以为你解决这个问题。

  Regex r = new Regex(Regex.Escape(expression));

答案 4 :(得分:0)

将此行放在web.config

<httpRuntime requestValidationMode="2.0" />

这是ASPNET 4.0的变化

答案 5 :(得分:0)

  

不,这是MVC 1 + xVal中的一个问题。   在MVC 2中,验证工作为   假设(并且不需要xVal   再见) - Alex42

看起来机器人继续把这个推到顶端。你能否将答案标记为已接受,以便知道?