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.