【问题标题】:<pages validateRequest="false" /> and <httpRuntime requestValidationMode="2.0" /> not working<pages validateRequest="false" /> 和 <httpRuntime requestValidationMode="2.0" /> 不工作
【发布时间】:2012-08-25 13:00:36
【问题描述】:

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

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

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

但是,我已将其添加到我的 web.config 中,但仍然出现错误。我已经走到了尽头,我错过了什么?

【问题讨论】:

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


    【解决方案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”/>
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        这是来自httpRuntime elementrequestPathInvalidCharacters 属性及其默认值。

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

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

        【讨论】:

          猜你喜欢
          • 2011-12-08
          • 2011-11-13
          • 2012-04-30
          • 2011-04-06
          • 1970-01-01
          • 1970-01-01
          • 2011-05-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多