Besoin d’une ligne de guidage pour la méthode d’action MVC avec l’atsortingbut Bind

Je passais en revue un code de méthode d’action et j’ai vu qu’un atsortingbut y était utilisé mais je ne comprenais pas vraiment l’utilisation. voici le code

public ActionResult User([Bind(Include = "Username,FullName,Email")]User user) { if (!ModelState.IsValid()) return View(user); try { user.save() // return the view again or redirect the user to another page } catch(Exception e) { ViewData["Message"] = e.Message; return View(user) } } ([Bind(Include = "Username,FullName,Email")]User user) 

Je ne comprends tout simplement pas la ligne ci-dessus

alors aidez-moi s’il vous plaît à comprendre ce type d’atsortingbut utilisé et quand les gens écrivent ce genre de code dans mvc. Ce sera vraiment utile si quelqu’un me fait comprendre avec un exemple de petit code où il utilisera cet Bind atsortingbute .

Mise à jour: Supposons que je dispose d’un formulaire à partir duquel l’utilisateur ne peut saisir que FirstName, LastName et Gender alors ma méthode d’action ressemble à

 public ActionResult Edit(ssortingng FirstName,ssortingng LastName,ssortingng Gender) { // ... } 

cela fonctionnera je pense. alors pourquoi je devrais utiliser un atsortingbut de liaison parce que ma méthode d’action ci-dessus fonctionnera correctement.

Bind atsortingbut Bind permet d’affiner le processus de liaison de modèle de certains types de parameters, sans enregistrer un ModelBinder personnalisé spécifique au type.

Par exemple, supposons que votre action attend un paramètre Person défini comme suit:

 public class Person { public Person(ssortingng firstName, ssortingng lastName, Gender gender) { this.FirstName = firstName; this.LastName = lastName; if (gender == Gender.Male) this.FullName = "Mr. " + this.FirstName + " " + this.LastName; else this.FullName = "Mrs. " + this.FirstName + " " + this.LastName; } public ssortingng FirstName { get; set; } public ssortingng LastName { get; set; } public Gender Gender { get; set; } // 'FullName' is a computed column: public ssortingng FullName { get; set; } } 

Et l’action:

 public ActionResult Edit(Person person) { ... } 

Maintenant, si quelqu’un publie le code JSON suivant:

 { "FirstName":"John", "LastName":"Smith", "Gender":"Male", "FullName":"Mrs. John Smith" } 

Votre action aura maintenant une person avec le mauvais nom FullName («Mme» au lieu de «Mr»).

Pour éviter un tel comportement, vous pouvez utiliser l’atsortingbut Bind et exclure explicitement la propriété FullName du processus de liaison (‘Black-list’):

 public ActionResult Edit([Bind(Exclude="FullName")] Person person) { ... } 

Vous pouvez également utiliser Include pour ignorer (“liste noire”) toutes les propriétés et inclure uniquement (“liste blanche”) les propriétés spécifiées:

 public ActionResult Edit([Bind(Include="FirstName,LastName,Gender")] Person person) { ... } 

Plus d’infos sur MSDN .

Lorsque cette action est exécutée, le classeur de modèle MVC utilisera les parameters de la demande pour renseigner les propriétés du paramètre user , comme vous le savez peut-être déjà. Cependant, l’atsortingbut Bind indique au modèle liant de ne renseigner que les propriétés avec des noms spécifiés.

Donc, dans ce cas, seules les propriétés Username , FullName et Email seront renseignées. Tous les autres seront ignorés.

Voir ici pour plus de détails: http://ittecture.wordpress.com/2009/05/01/tip-of-the-day-199-asp-net-mvc-defining-model-binding-explicitly/

L’atsortingbut Bind est un moyen de se protéger contre la surenchère dans les scénarios de création. Par exemple, supposons que l’entité Étudiant comporte une propriété Secret que vous ne souhaitez pas que cette page Web définisse.

 public class Student { public int ID { get; set; } public ssortingng LastName { get; set; } public ssortingng FirstMidName { get; set; } public DateTime EnrollmentDate { get; set; } public ssortingng Secret { get; set; } public virtual ICollection Enrollments { get; set; } } 

Même si vous n’avez pas de champ Secret sur la page Web, un pirate peut utiliser un outil tel que le violon ou écrire du code JavaScript pour publier une valeur de formulaire secrète. Sans l’atsortingbut Bind limitant les champs utilisés par le modèle lorsque celui-ci crée une instance Student, le classeur de modèle récupère cette valeur de formulaire Secret et l’utilise pour créer l’instance d’entité Student. Ensuite, la valeur spécifiée par le pirate pour le champ de formulaire Secret sera mise à jour dans votre firebase database. L’image suivante montre l’outil du violoniste ajoutant le champ Secret (avec la valeur “OverPost”) aux valeurs de formulaire publiées. La valeur “OverPost” serait alors ajoutée avec succès à la propriété Secret de la ligne insérée, bien que vous n’ayez jamais voulu que la page Web puisse définir cette propriété.

Il est recommandé d’utiliser le paramètre Include avec l’atsortingbut Bind pour les champs de liste blanche. Il est également possible d’utiliser le paramètre Exclude pour répertorier les champs que vous souhaitez exclure. La raison pour laquelle Include est plus sécurisé est que lorsque vous ajoutez une nouvelle propriété à l’entité, le nouveau champ n’est pas automatiquement protégé par une liste d’exclusion.