【问题标题】:ValidateRequest = False but in action it's still True and ignored that?ValidateRequest = False 但实际上它仍然是 True 并忽略它?
【发布时间】:2011-02-11 12:34:05
【问题描述】:

我想在 ASP.NET MVC 2.0 RTM 的特定视图上禁用 RequestValidation。所以我添加了一些必要的查看页面指令部分如下:

<%@ Page ValidateRequest="false" Language="C#" MasterPageFile="Path" Inherits="System.Web.Mvc.ViewPage<Path>" %>

RequestValidation 并未禁用!我还在控制器中的相关操作中添加了 RequestValidation 属性,如下所示:

[System.Web.Mvc.ValidateInput(false)]
public System.Web.Mvc.ActionResult Create(Model instance)
{
    //Do here something
}

:') 但 RequestValidation 也没有禁用!

在最后一次尝试中,我在 Web.config 文件中将 RequestValidation 设置为 false,如下所示:

<pages validateRequest="false" />

RequestValidation 仍未关闭!

为什么?提前谢谢;)

【问题讨论】:

  • 如何确定 ValidateRequest 没有关闭?另外,请提供您的 .net 框架版本、asp.net 和 mvc 版本。
  • 因为当我提交一个在字段上有 html 标签的表单时,我收到了一个 ValidationRequest 异常。我正在使用 ASP.NET 4.0 和 MVC 2.0
  • 感谢您的链接。但是如果我执行提供的方法来拥有它,那么所有新功能都将丢失!没有任何方法可以忽略特定视图/控制器的验证?
  • 同样的问题,这里没有介绍一些有趣的替代方案:stackoverflow.com/questions/2673850/…

标签: asp.net asp.net-mvc validation


【解决方案1】:

如果您使用的是 asp.net 4.0,则验证请求功能的行为已从 2.0 版更改。查看breaking changes document here。如果是这种情况,您可以通过将请求验证行为设置回 web.config 中的 2.0 来解决问题,如下所示:

<httpRuntime requestValidationMode="2.0" />

【讨论】:

  • 今天这救了我的命。谢谢:)
  • 这也解决了我的问题。但是我不明白为什么。重大更改涉及将验证扩展到非 aspx 请求,但是我仅将其用于普通的 aspx 页面。现在,在我看来 validateRequest 在 4.0 中被简单地破坏了。如果没有,是否有任何适当的方法可以在 4.0 中执行此操作而不会基本上恢复到 2.0?
  • 仅供参考:“第一个更改是将 httpRuntime 元素的 requestValidationMode 属性设置为“2.0”。此设置使请求验证在请求处理事件序列的后面发生。该设置是应用程序所必需的使用 ASP.NET 4 及更高版本,因为从 ASP.NET 4 开始,请求验证在请求生命周期中比在以前的 ASP.NET 版本中更早进行。”来自msdn.microsoft.com/en-us/library/hh882339.aspx
【解决方案2】:

只需添加

[验证输入(假)]

在您的控制器功能中 但不要忘记对值进行编码以防止有害代码

    [ValidateInput(false)]
    public string Browse(string test)
    {
        string message = HttpUtility.HtmlEncode("Value = " + test);
        return message;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多