2009-07-10 63 views
9

我試圖這樣做是爲了關閉請求驗證所有的操作方法在控制器:我不能關閉請求驗證爲ASP.NET MVC控制器

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

我使用的基準說這是可能的,並告訴我這樣做,但由於某種原因,它不工作。

如果我通過文本框提交任何HTML(甚至一個簡單的<b>標籤),我得到的錯誤:

A potentially dangerous Request.Form value was detected from the client (text=<b>").

它也不能由屬性附加到一個單獨的方法工作。

如何禁用控制器的請求驗證?

編輯

我正在VS2008內置測試服務器。

+0

根據上面這些不工作的東西,你就必須提供更多的細節。你是在IIS還是Cassini中運行?你正在運行MVC v1.0,對嗎?失敗行爲的方法簽名是什麼? – GalacticCowboy 2009-07-10 17:25:01

+4

我很喜歡當我找到有人問我確切的問題 - 只有看到它因爲不適用於其他訪問者而關閉。 FML。 – 2013-04-29 18:58:22

回答

14

我在我的機器上對類定義和操作方法進行了測試,它在兩種情況下都適用於我。你確定你的視圖與你的方法/控制器一致嗎?你把屬性放在GET方法或POST方法上嗎?

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateInput(false)] 
public ActionResult MyAction (int id, string content) { 
    // ... 
} 
+0

在原來的問題中,我說我做到了。我的參考資料,Apress Pro ASP.NET MVC框架明確指出:「如果您想爲特定操作方法或通過特定控制器禁用它,可以使用[ValidateInput]過濾器 ,如下所示: [ ValidateInput(false)] public class MyController:Controller {...}「 – 2009-07-10 16:24:58

+0

請參閱http://stackoverflow.com/questions/807662/why-is-validateinputfalse-not-working – 2009-07-10 16:33:02

+2

對不起,Ronnie。它適用於我的機器,無論是將屬性放在方法還是類中。 – 2009-07-10 16:41:00

2

臨ASP.NET MVC框架(P466)說,以下是這樣運作的:

public class MyController : Controller 
{ 
    public MyController() { 
     ValidateRequest = false; 
    } 
} 
+0

它不智能或編譯。我試圖把它放入行動方法(它在那裏它intellisense),但它沒有奏效。 – 2009-07-10 16:49:25

+0

「ValidateRequest = false;」應該是在構造函數中。我曾在我的一個控制器上嘗試過它,但轉錄錯誤。 – keithm 2009-07-10 16:59:06

+0

它可以工作,如果你把它放入構造函數。 – 2009-07-10 17:14:42

0

你可以發佈你的控制器文件和你的視圖文件。

This Works;

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> 
+0

您對asp.net mvc 2的示例不起作用 – IEnumerator 2010-04-27 15:32:16

12

要使其工作,你需要修改web.config中還有:

<system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    ... 
</system.web> 
+0

我在生產環境中部署了一年多的ASP.NET MVC 1.0項目,今晚客戶端向我發送了一封電子郵件,告訴我使用所見即所得編輯器的窗體之一提交。只要網站已經部署,我的操作[ValidateInput(false)]就已經完成,並且直到最近才正常運行。託管服務提供商必須已經改變了一些事情。我按照Jan的建議將httpRuntime標記添加到了system.web中,並解決了我的問題。 – 2011-09-20 01:38:46