Ottenere il nome utente all'interno di una classe modello
-
03-07-2019 - |
Domanda
Sto cercando di implementare il controllo di base con alcuni dei miei modelli (come CreatedAt, UpdatedAt, CreatedBy e UpdatedBy).
La parte data / ora è terminata. Sto lanciando eventi sui miei modelli quando una proprietà viene modificata (implementando INotifyPropertyChanging, INotifyPropertyChanged
) e posso aggiornare bene i campi corrispondenti.
Devo solo sapere come ottenere il nome utente corrente senza doverlo passare attraverso il controller ogni volta che creo un'istanza o ottengo un'istanza esistente di un modello.
Soluzione
Riferimento a System.Web e utilizzo HttpContext.Current.User.Identity.Name ha funzionato come un fascino.
Non lo sapevo. Grazie. Lo faccio in questo modo:
Membership.GetUser().UserName
In che modo è più veloce?
Altri suggerimenti
Il modo astratto di parlare dell'identità è il "principale" - vedi questa discussione . Spero che questo codice ti consenta di ottenere l'identità senza dover conoscere l'implementazione del login:
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();
Fare riferimento a System.Web
e usare HttpContext.Current.User.Identity.Name
ha funzionato come un fascino.