dans asp.net mvc, j'ai une méthode http et loginmodel est comme: p> Je veux la demande si le corps de la requête HTTP est Comment puis-je limiter le classeur de modèle MVC pour se comporter de cette manière sur certaines méthodes uniquement?
Cette exigence n'est pas pour toutes les méthodes, pour certains modèles dans le projet. P> P>
3 Réponses :
Solutions:
[HttpPost] public JsonResult SampleMethod() { dynamic prmModel= System.Web.Helpers.Json.Decode((new StreamReader(Request.InputStream).ReadToEnd())); Newtonsoft.Json.Schema.JsonSchema schema = JsonSchema.Parse(Jsonschema()); Newtonsoft.Json.Linq.JObject user = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(prmModel)); if (!user.IsValid(schema) || user.Count > 2) return Json("Bad Request"); } public string Jsonschema() { string schemaJson = @"{ 'description': 'A', 'type': 'object', 'properties': { 'UserName':{'type':'string'}, 'Password':{'type':'string'} } }"; return schemaJson; }
Le moyen facile d'implémenter cette exigence est la vérification demande.form.keys.count! = 2 ou> 2 code>
Il devrait être demande.frest.form.keys.count> 3 code> car il y a un
antiforegeryToken code>
Si vous pouvez utiliser Newtonsoft.json bibliothèque, il y a puis vous pouvez utiliser ce liant modèle avec maintenant, lorsque des propriétés non valides seront transmises, JsonerializerSettings code>. Vous pouvez écrire un classeur de modèle personnalisé pour désérialiser un objet à partir de JSON à l'aide de cette propriété, comme celui-ci:
modelbinderattribute code> pour un argument d'action spécifique : p>
jsonconvert code> lancera une erreur (sera http 500 pour les utilisateurs si une erreur ne sera pas manipulée) . p> p>
Si quelqu'un post
{nom d'utilisateur: 'u', mot de passe: 'P', factice: 'd'} code> ASP.NET MVC Model Linding sauvera automatiquement
mannequin code> et ne liant que Nom d'utilisateur et mot de passe à
LoginModel Code> Modèle. Alors quelle est votre préoccupation?
Que veux-tu accomplir? Le classeur de modèle par défaut, ignorerait toute façon la propriété factice.
Je ne veux pas ignorer et continuer avec des champs liés. Je souhaite que MVC générer une erreur et échouer si des champs non attendus rencontrés dans le corps.
Vous pouvez vérifier
requête.form ["nom d'utilisateur"] code> et demande.form.form] dans vos actions de contrôleur si autre que cette touche de formulaire trouvée, vous pouvez lancer une exception et la gérer comme
Demande.Form ["" Dummy "] code> puis lancer une exception
@Laljidhameliya Bien sûr, je peux le faire, mais je cherche des approches génériques intégrées.
Vous pouvez vérifier votre nom de propriétés de modèle
prmmodel.gettype (). getProperties (). Sélectionnez (x => x.name) code> et cochez cette liste dans
demande.forme code> de la clé la valeur existe autre que cela ou non
@Ahmetaltun - Il n'y a pas d'approche intégrée car personne ne se soucie de cela, autre que vous apparemment.
Il peut être fait à l'aide de la bibliothèque de modèle et de la bibliothèque Newtonsoft.json, voir Ma réponse