2010-08-30 52 views
3

我正在開發一個應用程序,該應用程序是從最近從MVC 1/.NET 2/3.5升級到MVC2/.NET 4的另一個開發商店繼承的。除了一頁以外,一切正常。在這個頁面上有一個加載了TinyMCE實例的iframe,並允許內聯編輯一些HTML模板。在託管頁面上,有一個連接到提交按鈕的JavaScript事件,點擊該按鈕時,會捕獲iframe的innerHtml值,將其轉換爲JSON並將其放置到隱藏的表單字段中。MVC 2和ASP.NET 4請求驗證異常

隨着形式的帖子我拿到檢測到臭名昭著的「有潛在危險的Request.Form值......」現在我也跟着微軟的白皮書,並添加

<httpRuntime requestValidationMode="2.0" /> 

爲了我的web.config和裝飾我的控制器,

[ValidateInput(false)] 

,我仍然收到此錯誤,有關堆棧的下面。

[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (HtmlContent="...orrectly? <a href=\"*|ARCHIVE|...").] 
System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8730676 
System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122 
System.Web.HttpRequest.get_Form() +114 
System.Web.HttpRequestWrapper.get_Form() +11 
System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request) +235 
System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) +119   
System.Web.Mvc.<>c__DisplayClass11.<RunSelectionFilters>b__d(ActionMethodSelectorAttribute attr) +57 
System.Linq.Enumerable.All(IEnumerable`1 source, Func`2 predicate) +145 
System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos) +524 
System.Web.Mvc.ActionMethodSelector.FindActionMethod(ControllerContext controllerContext, String actionName) +122 
System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName) +182 
System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, String actionName) +47 
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +283 
System.Web.Mvc.Controller.ExecuteCore() +136 
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +111 
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +39 
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +65 
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +44 
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +42 
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +140 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +54 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40 
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +52 
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38 
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8836913 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 

有趣的是,如果我掛鉤了Global.asax中的BeginRequest方法,這似乎表明代碼在請求驗證的2.0模式下運行,因爲如果我對.NET 4s請求驗證的理解是正確的,那麼我不會如果代碼在4.0驗證模型下運行,則可以獲得此方法,因爲它在BeginRequest之前處理所有內容。

現在我可以通過從隱藏表單字段的值調用JavaScript函數中的escape()函數來繞過這個問題,但顯然這是一個黑客行爲。是否有其他人遇到過這個問題,或者有什麼想法可以在我的控制器上正確禁用此方法的請求驗證?

謝謝!

回答

0

檢查是否在web.config中的 「頁面」 一節的樣子:

<pages validateRequest="false" ...>...</pages> 

如果不嘗試添加validateRequest屬性。它適用於我,因爲我在幾個月前遇到了同樣的問題。

編輯:哈哈,我沒有看到它是如此之舊的帖子。但我離開了我的answear,因爲也許它可以幫助別人