2

Si j'ai un contrôleur:Mapper des données HttpPost pour modéliser dans MVC - Comment capturer des données avec "-" dans le nom?

[HttpPost] 
public ReturnType ControllerMethod(CustomModel c) 
{ 
... 
} 

Un tiers est l'affichage des données sur cette méthode:

abc-xyz=testdata 

Une façon, serait d'utiliser:

Request.Params["abc-xyz"] 

Cependant, le cas où la demande pourrait contenir du code malveillant, si un paramètre de demande contenait du code problématique, IIS lançait un HttpRequestValidationException dès que le Request.Params[""] est appelé.

Maintenant, plutôt que de désactiver cette validation partout, je voudrais mapper les données publiées à mon modèle. De cette façon, si le "code potentiellement malveillant" est contenu dans un paramètre qui n'est pas "abc-xyz", mon application ne lancera pas un HttpRequestValidationException. Il vérifiera cependant les paramètres utilisés et lancera un HttpRequestValidationException si les données accédées sont potentiellement malveillantes.

Comment faire cela si les données affichées ont un tiret/tiret dans le nom?

J'ai essayé quelques variantes dont:

public class CustomModel 
{ 
    [Required] 
    public string abc_xyz 
} 

Répondre

2

Vous devez écrire votre propre ModelBinder dans ce cas, qui transforme les valeurs de la demande dans les nécessaires pour CustomModel.

Pour surpasser la validation de la requête, vous pouvez l'éteindre avec le ValidateInputAttribute sur votre action de contrôleur.

+0

Merci pour la réponse. J'ai trouvé quelques articles sur l'écriture de ModelBinder personnalisé. Cependant, ils semblent tous être des morceaux de code assez gros qui compliquent ma base de code. Je suppose que je m'attendais à une simple annotation pour faire le travail Ie: [Mapping ("abc-xyz")]. – dazbradbury

+0

il n'y a pas un de la boîte. C'est le modèle de responsabilité liant. –

+0

OK, merci. J'ai créé un classeur de modèle personnalisé, mais lorsque j'essaie d'accéder aux paramètres de la requête, il lance une exception HttpRequestValidationException. Le ModelBinder intégré ne lance pas cette exception. – dazbradbury

Questions connexes