J'ai rencontré le même problème même si j'ai ajouté [System.Web.Mvc.AllowHtml]
à la propriété concernée comme décrit dans certaines réponses.
Dans mon cas, j'ai une classe UnhandledExceptionFilter
qui accède à l'objet Request avant la validation MVC (et donc AllowHtml n'a pas d'effet) et cet accès déclenche une [HttpRequestValidationException] Une valeur Request.Form potentiellement dangereuse a été détectée depuis le client
.
Cela signifie que l'accès à certaines propriétés d'un objet Request déclenche implicitement la validation (dans mon cas, il s'agit de la propriété Params
).
Une solution pour empêcher la validation est documentée sur MSDN
Pour désactiver la validation de requête pour un champ spécifique dans une requête (par exemple, pour un élément d'entrée ou une valeur de chaîne de requête), appelez la méthode Request.Unvalidated lorsque vous obtenez l'élément, comme indiqué dans l'exemple suivant
Par conséquent, si vous avez du code comme celui-ci
var lParams = aRequestContext.HttpContext.Request.Params;
if (lParams.Count > 0)
{
...
changez-le en
var lUnvalidatedRequest = aRequestContext.HttpContext.Request.Unvalidated;
var lForm = lUnvalidatedRequest.Form;
if (lForm.Count > 0)
{
...
ou utilisez simplement la propriété Form
qui ne semble pas déclencher de validation
var lForm = aRequestContext.HttpContext.Request.Form;
if (lForm.Count > 0)
{
...
3 votes
Pour les futurs visiteurs : À mon avis, les réponses de Chris J ou Eugene Bosikov sont meilleures que celle acceptée pour les versions ultérieures d'ASP.NET MVC, surtout si vous ne souhaitez autoriser le HTML que dans un champ.