2010-08-19 86 views
3

我正在使用ASP.NET MVC 2,.NET 4.0。ASP.NET請求驗證異常即使驗證被禁用

我有一個控制器,禁用請求驗證:

[AcceptVerbs("POST")] 
[ValidateInput(false)] 
public ActionResult Add(string userId, FormCollection formValues) 
{ 
    //... 
} 

,我仍然得到一個HttpRequestValidationException當POST包含HTML:

 
System.Web.HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (ThisWeek=""). 
    at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) 
    at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) 
    at System.Web.HttpRequest.get_Form() 
    at System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request) 
    at System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) 
    at System.Linq.Enumerable.All[TSource](IEnumerable`1 source, Func`2 predicate) 
    at System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos) 
    at System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName) 
    at System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, String actionName) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 
    at System.Web.Mvc.Controller.ExecuteCore() 
    at System.Web.Mvc.MvcHandler.c__DisplayClass8.b__4() 
    at System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass1.b__0() 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

我需要讓輸入HTML文本這裏該應用程序是一個錯誤跟蹤系統,人們在提交錯誤時討論HTML。我正確處理這個動作的輸入,並且在重新輸出時對它們進行適當的編碼,所以對這個動作禁用驗證是合理的。

我們最近切換到MVC2和.NET 4,這開始出現。從堆棧跟蹤看來,驗證是作爲HTTP方法覆蓋的新支持的處理的一部分發生的(通過包括特殊命名的隱藏輸入使POST看起來像PUT或DELETE)。但我不知道如何告訴子系統停止驗證輸入。

我需要做些什麼來完成這項工作?

+0

的答案是正確的,但想補充一點,如果你使用你的RenderAction也有發生禁用任何「孩子」驗證。 – jfar 2010-08-19 16:37:10

回答

4

添加到您的web.config system.web部分:

<httpRuntime requestValidationMode="2.0" />