我有一个ASP.NET MVC形式,可能(通常)提交一个响应,将触发“从客户端检测到一个潜在危险的Request.Form值”错误。
为了试图解决这个问题,我在页面指令中放置了一个ValidateRequest =“false”。
只有问题:我仍然得到的错误!
现在,一切都很好,直到我更新到ASP.NET MVC RC今天上午,(根据readme),放置以下在视图web.config:
<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,System.Web.Mvc,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage,PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl,PublicKeyToken=31BF3856AD364E35"> <controls> <add assembly="System.Web.Mvc,PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> </pages>
所以,validateRequest对于所有页面应该是false,对吧?我缺少什么?
解决方法
在MVC中,验证发生在控制器级别,而不是页面级别。为了看看为什么会这样,考虑在控制器动作执行的时候,我们不知道选择哪个视图来渲染。 (实际上,控制器动作甚至可能甚至不渲染视图!它可能在客户端打开文件下载提示)。此外,如果用户提交恶意输入到服务器,在视图呈现它的时间太晚了,不能做任何事情。控制器已经将危险输入提交到数据库。
相反,请使用属性[ValidateInput(false)]装饰控制器或操作。这将导致我们抑制对该控制器或操作的请求验证。