Question

Je suis en train de convertir une application que j'ai créée à l'aide de formulaires Web en un framework asp.net mvc à l'aide de vb.net. J'ai un problème avec l'un de mes points de vue. L'écran jaune de la mort m'indique que & "Une valeur Request.Form potentiellement dangereuse a été détectée par le client &"; quand je soumets mon formulaire. J'utilise tinymce comme RTE. J'ai mis sur la vue elle-même

  

ValidateRequest = " faux "

Je sais que dans MVC, cela ne la respecte pas d'après ce que j'ai lu jusqu'à présent. Donc, je le mets sur l'action du contrôleur aussi. J'ai essayé différentes configurations:

<ValidateInput(False), AcceptVerbs(HttpVerbs.Post)> _

... et ...

<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _

... et comme ça aussi ...

<ValidateInput(False)> _
<AcceptVerbs(HttpVerbs.Post)> _

Juste pour voir si cela a fait une différence, pourtant je reçois toujours l’écran jaune de la mort. Je souhaite uniquement le définir pour cette vue et l'action spécifique dans mon contrôleur qui concerne mon message. Est-ce que je manque quelque chose?

Était-ce utile?

La solution

Êtes-vous sûr que l'action du contrôleur en cours d'enregistrement est celle sur laquelle vous avez les attributs?

Autres conseils

Avec asp.net 4, vous devez également configurer le mode de validation dans le fichier web.config.

Définissez les éléments suivants en tant qu'enfant de <system.web> élément:

<system.Web>
  ...
  <httpRuntime requestValidationMode="2.0"/>     

Asp.Net 4 définit le paramètre requestValidationMode sur 4.0 par défaut, ce qui indique au système d'effectuer la validation de la demande avant la phase BeginRequst de la demande HTTP. La validation aura lieu avant que le système n'atteigne l'attribut d'action lui indiquant de ne pas valider la demande, rendant ainsi l'attribut inutile. Définition de requestValidationMode = & Quot; 2.0 & Quot; reviendra au comportement de validation de la demande asp.net 2.0, permettant à l'attribut ValidateInput de fonctionner comme prévu.

Lorsque vous utilisez vos propres classeurs de modèle qui implémentent l'interface IModelBinder , vous remarquerez que ces classeurs de modèle personnalisé valident toujours les données, quels que soient leurs attributs. Vous pouvez ajouter quelques lignes de code pour que les classeurs de modèle personnalisé respectent le filtre ValidateInput des actions:

// First check if request validation is required
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;

// Get value
var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
if (valueProviderResult != null)
{
    var theValue = valueProviderResult.AttemptedValue;

    // etc...
}

Ceci est très bien expliqué par Martijn Boland ici: http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/

Veuillez noter que ces suggestions ne résoudront pas les problèmes causés par un bogue qui survient lorsque vous devez utiliser [ValidateInput (false)] en combinaison avec un FormCollection.

Voir: ASP.NET MVC 3 ValidateRequest (false) ne fonctionne pas avec FormCollection

Vous pouvez essayer d'accéder au champ comme HttpContext.Request.Unvalidated.Form [& QuotName Nom du champ & Quot;]]

Si vous utilisez un modèle en entrée et utilisez un AllowHtml sur la propriété souhaitée, vous serez débloqué.

public class InputModel
{
    [AllowHtml]
    public string HtmlInput { get; set; }
}

...
[ValidateInput(false)]
public async Task<ActionResult> ControllerMethod(InputModel model)
{
}

Ajoutez la ligne de code suivante:

GlobalFilters.Filters.Add(new ValidateInputAttribute(false));

à la méthode Application_Start ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top