ValidateRequest="false" 在 Asp.Net 4 中不起作用

问题描述 投票:0回答:6

我有一个使用 ckeditor 的表单。这种形式在 Asp.Net 2.0 和 3.5 中运行良好,但现在在 Asp.Net 4+ 中不起作用。我有 ValidateRequest="false" 指令。有什么建议吗?

asp.net asp.net-4.0 validate-request
6个回答
204
投票

在错误页面本身找到解决方案。只需要在 web.config 中添加 requestValidationMode="2.0"

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime requestValidationMode="2.0" />
</system.web>

MSDN 信息:HttpRuntimeSection.RequestValidationMode 属性


105
投票

有一种方法可以将一页的验证返回到 2.0。只需将以下代码添加到您的 web.config 中即可:

<configuration>
    <location path="XX/YY">
        <system.web>
            <httpRuntime requestValidationMode="2.0" />
        </system.web>
    </location>

    ...
    the rest of your configuration
    ...

</configuration>

59
投票

我知道这是一个老问题,但是如果您在 MVC 3 中遇到这个问题,那么您可以用

ActionMethod
装饰您的
[ValidateInput(false)]
,然后关闭单个
ActionMethod
的请求验证,这很方便。而且您不需要对
web.config
文件进行任何更改,因此您仍然可以在其他任何地方使用 .NET 4 请求验证。

例如

[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
    // Do your own checking of value since it could contain XSS stuff!
    return View();
}

28
投票

这无需更改验证模式即可工作。

您必须使用来自

System.Web.Helpers.Validation.Unvalidated
System.Web.WebPages.dll
助手。它将返回一个
UnvalidatedRequestValues
对象,该对象允许无需验证即可访问表单和 QueryString。

例如,

var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));

适用于 MVC3 和 .NET 4。


16
投票

请注意,另一种方法是保持 4.0 验证行为,但定义您自己的派生自

RequestValidator
的类并设置:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

(其中

YourNamespace.YourValidator
很好,你应该能猜到...)

通过这种方式,您可以保留 4.0 行为的优点(具体来说,验证发生在处理的早期),同时还允许您需要通过的请求。


0
投票

我在这里找到了解决方案:https://www.aspsnippets.com/Articles/Solved-ValidateRequest-false-not-working-in-Net-40-and-45-in-ASPNet.aspx

总结:

  1. 如果您想在页面级别设置此项,请像这样设置 ValidateRequest="false"
    <%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" %>
  2. 您还需要修改httpRuntime以使其requestValidationMode =“2.0”或将其添加到
    <system.web>
    ,如下所示
<system.web>
    <httpRuntime maxRequestLength="91200" executionTimeout="9000" requestValidationMode="2.0" />
</system.web>

这在 .NET 4.8 中对我有用

© www.soinside.com 2019 - 2024. All rights reserved.