我试图通过执行以下操作来关闭控制器中所有操作方法的请求验证:
[ValidateInput(false)]
public class MyController : Controller
{
...
我正在使用的参考说这是可能的,并告诉我这样做,但由于某种原因它不起作用。
如果我通过文本框提交任何html(即使是简单的< b>标记),我会收到错误:
从客户端检测到潜在危险的Request.Form值(text =< b>“)。
通过将属性附加到单个方法也无法正常工作。
如何禁用控制器的请求验证?
我在VS2008内置测试服务器。
答案 0 :(得分:14)
我在我的机器上测试了它,在类定义和动作方法上,在两种情况下它都适用于我。您确定您的视图与您的方法/控制器对齐吗?您是将该属性放在GET方法还是POST方法上?
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult MyAction (int id, string content) {
// ...
}
答案 1 :(得分:12)
要使其正常工作,您还需要修改web.config:
<system.web>
<httpRuntime requestValidationMode="2.0"/>
...
</system.web>
答案 2 :(得分:2)
Pro ASP.NET MVC Framework(p466)说以下内容应该可行:
public class MyController : Controller
{
public MyController() {
ValidateRequest = false;
}
}
答案 3 :(得分: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();
}
}
}
MyTest的(索引)------------------------------------------- ------------
<%@ 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>