2010-08-30 4 views
3

Je travaille sur une application dont j'ai hérité d'un autre atelier de développement que j'ai récemment mis à niveau vers MVC2/.NET 4 à partir de MVC 1/.NET 2/3.5. Tout fonctionne correctement à l'exception d'une page. Sur cette page, il y a un iframe qui charge une instance de TinyMCE et permet l'édition en ligne de certains modèles HTML. Sur la page d'hébergement, un événement JavaScript est connecté au bouton d'envoi qui, lorsqu'il est cliqué, saisit la valeur innerHtml de l'iframe, le convertit en JSON et le place dans un champ de formulaire masqué.Exception de validation de requête MVC 2 et ASP.NET 4

Comme les postes de forme que je reçois le tristement célèbre « Une valeur Request.Form potentiellement dangereuse a été détectée ... » Maintenant, j'ai suivi le livre blanc de Microsoft et a ajouté

<httpRuntime requestValidationMode="2.0" /> 

A mon web.config et décoré avec mon contrôleur

[ValidateInput(false)] 

Et je reçois toujours cette erreur. La pile est pertinente ci-dessous.

[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 

Il est intéressant de noter que si je croise la méthode BeginRequest dans Global.asax, cela semblerait indiquer que le code fonctionne sous le mode de validation de la requête 2.0, car si ma compréhension de la validation de la requête .NET 4s est correcte, je ne serais pas capable d'arriver à cette méthode si le code fonctionnait sous le modèle de validation 4.0 puisqu'il traite tout avant BeginRequest.

Maintenant, j'étais capable de contourner ce problème en appelant escape() à partir d'une fonction JavaScript sur la valeur du champ de formulaire caché mais c'est, évidemment, un hack. Quelqu'un d'autre a-t-il rencontré ce problème ou a-t-il une idée de ce que je peux faire pour désactiver correctement la validation de la demande pour cette méthode sur mon contrôleur?

Merci!

Répondre

0

Vérifiez si votre "pages" section web.config ressemble:

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

sinon essayez d'ajouter l'attribut validateRequest. Cela fonctionne pour moi parce que j'ai eu le même problème il y a quelques mois.

éditer: lol, je n'ai pas vu que c'est si vieux poste. mais je laisse mes answear, car peut-être ça aide quelqu'un d'autre

Questions connexes