在ASP.NET MVC中,ValidateInput属性似乎不起作用。

17

我试图避免出现“潜在危险的Request.Form值”错误,但是一直没有成功。是的,我已经阅读了所有其他相关的StackOverflow问题,但是它们似乎都没有让我更接近答案。我在所有相关的控制器操作上使用[ValidateInput(false)],而且我已经检查了很多次。在相关的ASPX视图中,我使用ValidateRequest='false'

我正在使用ASP.NET MVC 2 Preview 1,但我认为这不是问题,因为错误发生在框架较低的位置;具体来说是Page.ProcessRequest。我看不出我做错了什么,我甚至在web.config中设置了<page validateRequest='false'>也没有解决问题。

4个回答

32

在asp.net 4中,您需要在web.config中配置验证模式。

将以下内容设置为 <system.web> 元素的子元素:

<httpRuntime requestValidationMode="2.0"/>

在Asp.Net 4中,默认情况下将requestValidationMode设置为4.0,这告诉系统在HTTP请求的“BeginRequest”阶段之前执行请求验证。 验证将在系统到达操作属性之前发生,该属性告诉它不要验证请求,因此该属性变得无用。设置requestValidationMode="2.0"会恢复到Asp.net 2.0的请求验证行为,允许ValidateInput属性按预期工作。

(感谢Jim-请在这里进行点赞)


使用这种方法时有什么缺点吗?是否有一种方法可以针对每个操作进行配置? - A.R.
你是救命恩人。另外,我想知道这个有没有什么缺点? - Kaushik Thanki

7

好的...我已经解决了自己的问题...罪魁祸首是Html.RenderAction<T>。如果请求上下文中有对其他操作的调用(例如来自主页或子部分的调用),则这些操作也需要适当设置[ValidateInput(false)]。然而,这似乎是MVC或ASP.NET中页面对象工作方式的一个问题,因为这是一个非常难以发现的错误。


1

您需要在每个控制器操作中添加该属性,以便在请求期间调用,即检查所有部分请求。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接