Obtenir le nom d'utilisateur dans une classe de modèle
-
03-07-2019 - |
Question
J'essaie d'implémenter l'audit de base avec certains de mes modèles (comme CreatedAt, UpdatedAt, CreatedBy et UpdatedBy).
La partie date / heure est terminée. Je lance des événements sur mes modèles lorsqu'une propriété est modifiée (implémentation de INotifyPropertyChanging, INotifyPropertyChanged
) et peut parfaitement mettre à jour les champs correspondants.
J'ai juste besoin de savoir comment obtenir le nom d'utilisateur actuel sans le transmettre par le contrôleur chaque fois que j'instancie ou récupère une instance existante d'un modèle.
La solution
Référencement de System.Web et utilisation de HttpContext.Current.User.Identity.Name travaillé comme un charme.
Je ne savais pas à ce sujet. Merci. Je le fais comme ça:
Membership.GetUser().UserName
Quel est le chemin le plus rapide?
Autres conseils
La manière abstraite de parler d'identité est le "principal". - consultez ce fil . J'espère que ce code vous permettra d'obtenir l'identité sans avoir à connaître l'implémentation de la connexion:
public static class SomeUtilityClass {
public static string GetUsername() {
IPrincipal principal = Thread.CurrentPrincipal;
IIdentity identity = principal == null ? null : principal.Identity;
return identity == null ? null : identity.Name;
}
}
...
record.UpdatedBy = record.CreatedBy = SomeUtilityClass.GetUsername();
Référencer System.Web
et utiliser HttpContext.Current.User.Identity.Name
a fonctionné comme un charme.