11

我正在尝试通过执行以下操作关闭控制器中所有操作方法的请求验证:

[ValidateInput(false)]
public class MyController : Controller
{
    ...

我正在使用的参考资料说这是可能的,并告诉我这样做,但由于某种原因它不起作用。

如果我通过文本框提交任何 html(甚至是简单的 <b> 标签),我会收到错误消息:

从客户端检测到具有潜在危险的 Request.Form 值 (text=<b>")。

通过将属性附加到单个方法也不起作用。

如何禁用控制器的请求验证?

编辑

我在内置测试服务器的 VS2008 中工作。

4

4 回答 4

15

我在我的机器上测试了它,在类定义和操作方法上,它在两种情况下都对我有用。您确定您的视图与您的方法/控制器一致吗?您是将属性放在 GET 方法还是 POST 方法上?

[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]   
public ActionResult MyAction (int id, string content) {   
    // ...   
}
于 2009-07-10T16:07:51.670 回答
13

要使其正常工作,您还需要修改 web.config:

<system.web>
    <httpRuntime requestValidationMode="2.0"/>
    ...
</system.web>
于 2011-01-13T23:18:27.253 回答
2

Pro ASP.NET MVC Framework (p466) 说以下应该可以工作:

public class MyController : Controller 
{
     public MyController() {
        ValidateRequest = false;
     }
}
于 2009-07-10T16:37:04.187 回答
0

你能发布你的控制器文件和你的视图文件吗?

这行得通;

MytestController--------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace testapp.Controllers
{
    [ValidateInput(false)]
    public class MyTestController : Controller
    {

        public ActionResult Index()
        {
            return View();
        }

    }
}

我的测试(索引)---------------------------------------------- ---------

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Index</title>
</head>
<body>
 <% using (Html.BeginForm()) { %>
 <%= Html.TextBox("test")%>
 <button type="submit"  >Submit</button>
 <%} %>
</body>
</html>
于 2009-07-10T17:54:19.100 回答