0
votes

ASP.NET MVC Rejeter sur des champs supplémentaires

dans asp.net mvc, j'ai une méthode http xxx

et loginmodel est comme: xxx

Je veux la demande échouer , si le corps de la demande a plus de champs que prévu (nom d'utilisateur et mot de passe)

si le corps de la requête HTTP est la demande devrait échouer à cause du champ "mannequin" dans mon cas. (Exception ou mauvaise demande de demande)

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.


8 commentaires

Si quelqu'un post {nom d'utilisateur: 'u', mot de passe: 'P', factice: 'd'} ASP.NET MVC Model Linding sauvera automatiquement mannequin et ne liant que Nom d'utilisateur et mot de passe à LoginModel 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"] 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 "] 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) et cochez cette liste dans demande.forme 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


3 Réponses :


0
votes

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;
}


0 commentaires

0
votes

Le moyen facile d'implémenter cette exigence est la vérification demande.form.keys.count! = 2 ou> 2 xxx


1 commentaires

Il devrait être demande.frest.form.keys.count> 3 car il y a un antiforegeryToken



1
votes

Si vous pouvez utiliser Newtonsoft.json bibliothèque, il y a propriétés MasterMemberMandling dans JsonerializerSettings . 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: xxx

puis vous pouvez utiliser ce liant modèle avec modelbinderattribute pour un argument d'action spécifique : xxx

maintenant, lorsque des propriétés non valides seront transmises, jsonconvert lancera une erreur (sera http 500 pour les utilisateurs si une erreur ne sera pas manipulée) .


0 commentaires