【问题标题】:Request Validation - ASP.NET MVC 2请求验证 - ASP.NET MVC 2
【发布时间】:2010-12-11 12:39:36
【问题描述】:

对于 ASP.NET MVC 2 的请求验证是否已更改,更准确地说,不是验证?

我做了以下事情:

Web.configs(在 App 目录和 Views 目录中)

<pages
    validateRequest="false"

控制器/动作属性

[ValidateInput(false)]

在@Page View 指令中

ValidateRequest="false"

页面仍然得到验证,但在发布 HTML 内容时会引发异常。

更新

创建了一个新的 ASP.NET MVC 2 应用程序,我将 Home Controller 的索引修改为这个

    [ValidateInput(false)]
    public ActionResult Index(string InputText)
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

还有我的浏览页面

<% using(Html.BeginForm()){ %>
    <%= Html.TextBox("InputText") %>
    <input type="submit" />
<% } %>

还是同样的问题,抛出异常。

【问题讨论】:

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


    【解决方案1】:

    在此处插入有关 XSS 的强制性警告。

    您使用ValidateInputAttribute 装饰控制器(或操作)就足够了,因为所有验证都是在 ASP.NET MVC 中的此控制器级别完成的

    我现在刚刚在一个动作上尝试了这个,当我输出它时它返回一个很好的、邪恶的 alert(),所以我冒险猜测这里还有其他事情发生。

    您是否在任何地方设置了HandleErrorAttribute

    【讨论】:

    • 我实现了一个自定义视图页面,您可以在 stackoverflow.com/questions/1480373/… 看到,看看是否有任何东西导致它使用 ASP.NET MVC 2 进行验证
    • 也没有 HandleError 属性。
    【解决方案2】:

    下次我应该更仔细地阅读错误:

    要允许页面覆盖应用程序请求验证设置, 在配置部分设置 requestValidationMode="2.0"。 设置此值后,您可以通过以下方式禁用请求验证 设置 validateRequest="false"

    我把它放在应用程序的 web.config 中

    <system.web>
      <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
    </system.web>
    

    它成功了。

    更新:

    我运行的是 ASP.NET 4,这就是为什么:P

    【讨论】:

    • &lt;system.web&gt; 开始/结束标签内
    • 这对我不起作用,我不得不使用 MVC2 RTM 的属性
    • @Alexandre Brisebois,奇怪的是你使用的是 .NET 4 吗?
    • 是的,不过想想,是在VS 2010升级的项目上
    • 我误解了你的第一条评论。您必须在 Web.config 文件中使用属性和此设置才能在 .NET 4 中工作
    猜你喜欢
    • 2011-05-06
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多