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!