2010-08-19 8 views
3

J'utilise ASP.NET MVC 2, .NET 4.0.Exception de validation de requête ASP.NET même lorsque la validation est désactivée

J'ai un contrôleur qui désactive la validation de la demande:

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

et je reçois encore HttpRequestValidationException lorsqu'un POST contient 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) 

Je dois permettre le texte HTML dans l'entrée ici l'application est un système de suivi des bogues et les gens parlent de HTML dans leurs soumissions de bogues. Je gère correctement les entrées de cette action et je code de façon appropriée les choses au fur et à mesure de leur sortie. Il est donc raisonnable de désactiver la validation pour cette action.

Nous avons récemment basculé sur MVC2 et .NET 4 et cela a commencé à apparaître. À partir de la trace de la pile, il semble que la validation s'effectue dans le cadre du traitement du nouveau support pour les substitutions de méthode HTTP (faire un POST ressembler à PUT ou DELETE en incluant une entrée cachée nommée). Mais je ne sais pas comment dire à ce sous-système d'arrêter de valider l'entrée.

Que dois-je faire pour que cela fonctionne?

+0

Les réponses sont correctes mais je voulais ajouter que si votre utilisez-vous RenderAction devez également désactiver toute validation « enfant » de se produire. – jfar

Répondre

4

Ajouter cette section à system.web de votre web.config:

<httpRuntime requestValidationMode="2.0" />