<pages validaterequest =“false”>和<httpruntime requestvalidationmode =“2.0”>无法正常工作</httpruntime> </pages>

时间:2012-08-30 18:12:43

标签: asp.net web-config request.form requestvalidationmode

我使用框架4.0继承了MVC asp.net应用程序。

我遇到了可怕的“从客户端检测到一个潜在危险的Request.Form值”错误,我的所有研究都让我相信这应该解决它:

<system.web>
    <httpRuntime requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

但是,我已将其添加到我的web.config并仍然收到错误。我在这里的绳子尽头,我错过了什么?

3 个答案:

答案 0 :(得分:1)

除了你所做的,你还必须使用ValidateInput属性来装饰你的方法。

[ValidateInput(false)]
public ActionResult MyActionMethod(string myParameter)
{
    // Method implementation goes here... 
}

还有一种替代方法,如果要处理整个站点的验证,可以实现自己的请求验证器并将其绑定到web.config中。请查看this blog post如何全面实施它。

基本上,创建一个继承自RequestValidator的类,然后将其挂接到web.config上。

<httpRuntime requestValidationType=”Globals.CustomRequestValidation”/>

希望这有帮助!

答案 1 :(得分:0)

采取另一种方法。在httpRuntime中,指向自定义验证类。这种方式可以完全控制传入的请求,因为在处理管道的开头,每个请求都会触发验证器。

特别是,如果您实施验证程序以返回true,您将无条件接受所有传入请求。

http://msdn.microsoft.com/en-us/library/system.web.util.requestvalidator.aspx

答案 2 :(得分:0)

最简单的方法是从验证系统中删除您想要的字符。

以下是httpRuntime elementrequestPathInvalidCharacters属性及其默认值。

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\" />
<!-- the unescaped characters are: < > * % & : \  -->

删除您要授权的字符,请求将起作用。