Comment devrais-je accéder à mon ApplicationUser propriétés à partir de l'intérieur de mon MVC 6 Vues?

Je suis en train de travailler sur un ASP.Net vNext /MVC6 projet. Je suis de se familiariser avec ASP.Net l'Identité.

La ApplicationUser classe est apparemment là que je suis censé pour ajouter des propriétés de l'utilisateur, et cela fonctionne avec Entity Framework et mon propriétés supplémentaires sont stockés dans la base de données comme prévu.

Cependant, le problème vient quand je veux accéder aux détails de l'utilisateur actuellement connecté à partir de l'intérieur de mon point de vue. Plus précisément, j'ai un _loginPartial.cshtml dans laquelle je veux récupérer et d'afficher à l'utilisateur de Gravatar icône, pour lequel j'ai besoin de l'adresse e-mail.

Le Rasoir View de la classe de base a une propriété de l'Utilisateur, qui est un ClaimsPrincipal. Comment puis-je passer de cette User propriété de retour à mon ApplicationUser, pour récupérer mon propriétés personnalisées?

Remarque que je ne suis pas demandant comment trouver l'information; je sais comment à la recherche d'un ApplicationUser de la User.GetUserId() valeur. C'est plus une question à propos de la manière d'aborder ce problème de confidentialité. Plus précisément, je ne veux pas:

  • Effectuer toute sorte de recherche de base de données à partir de l'intérieur de mon point de vue (la séparation des préoccupations)
  • Avoir à ajouter de la logique de chaque contrôleur de récupérer l'utilisateur courant (principe SEC)
  • Ont pour ajouter une propriété de l'Utilisateur à chaque ViewModel.

Cela semble comme une "préoccupation horizontale" qui aurait une centralisation de la solution standard, mais je sens que je suis en manque un morceau du puzzle. Quel est le meilleur moyen d'obtenir des propriétés de l'utilisateur à partir de l'intérieur de vues?

Remarque: Il semble que le MVC équipe a côté intensifié ce problème dans les modèles de projet en veillant à ce que le nom de la propriété est toujours fixé à l'adresse électronique de l'utilisateur, en évitant soigneusement la nécessité pour eux d'effectuer cette recherche pour obtenir l'adresse email de l'utilisateur! Cela me semble un peu de la triche pour moi et dans ma solution le nom de l'utilisateur peut ou ne peut pas être leur adresse e-mail, donc je ne peux pas compter sur ce truc (et je pense qu'il y aura d'autres propriétés, j'ai besoin d'accéder à plus tard).

La réponse à cette question est un gros que je n'ai pas le temps de répondre maintenant, mais voici quelques idées. 1. Je crois que tout ce que vous avez ajouté est accessible quelque part sur l'objet. Je l'ai fait dans le passé, je ne sais pas où, sans la traque de l'ancien code. En ce qui concerne vos balles: 1. Sans plus de code, ne peut pas dire, mais je ne pense pas que se produit par défaut. 2. Vous pouvez ajouter du code dans un emplacement unique, qui récupère l'utilisateur sur chaque demande; je dois trouver un tutoriel. 3. Vous n'avez pas à le faire, mais vous pourriez vouloir utiliser un viewmodel à la place de l'Identité de l'objet.
Je pense que j'ai peut-être quelque chose: voir les Composants. Dans MVC6 ceux-ci permettent une vue partielle sur ont leur propre contrôleur, dans lequel le UserManager peut être injecté. Plus d'expérimentation nécessaire, je vais poster ce que j'ai trouver, sauf si quelqu'un arrive avec une meilleure réponse en premier.
Couple de façons de voir cela se produire. vous pouvez soit ajouter des revendications à la direction avec valeurs nécessaires ou vous pouvez tout simplement créer des méthodes d'extension sur votre utilisation de l'application pour obtenir ces valeurs dans votre point de vue.
Veuillez mettre à jour ou ajouter votre propre réponse lorsque vous venez avec une solution viable. Je vous remercie.
Je suis pas sur la mise au point jusqu'à ce que Microsoft version RC2 de ASP.Net de base.

OriginalL'auteur Tim Long | 2016-03-03