Per quanto ne so, WebSecurity è solo un wrapper.
Questo è corretto, entrambi sono uguali. Diamo uno sguardo a come la proprietà WebSecurity.IsAuthenticated
è implementata:
public static bool IsAuthenticated
{
get
{
return Request.IsAuthenticated;
}
}
e ora diamo un'occhiata a come la proprietà statica WebSecurity.Request
è implementata:
internal static HttpRequestBase Request
{
get
{
return Context.Request;
}
}
e, infine, diamo uno sguardo a come il WebSecurity.Context
proprietà statica è implementata:
internal static HttpContextBase Context
{
get
{
return new HttpContextWrapper(HttpContext.Current);
}
}
Quindi, come potete vedere:
WebSecurity.IsAuthenticated
è uguale a:
new HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated
che a sua volta è la stessa Context.User.Identity.IsAuthenticated
con una leggera differenza che ci sono controlli nulli e la proprietà restituirà false se ad esempio la proprietà Identity
è nullo.
Devo usarlo o User.Identity ha diverse funzionalità?
Anche se i due sono strettamente equivalenti Vorrei utilizzare il User.Identity
, che è l'implementazione ufficiale di ASP.NET, perché se domani si decide di sostituire il semplice provider di appartenenza con qualcos'altro si avrà molto meno cose da sostituire nella vostra codice.
fonte
2013-04-06 16:30:37
Quindi, seguendo il tuo consiglio, per ottenere l'ID utente, non userò WebSecurity.CurrentUserId e utilizzerò invece Membership.GetUser(). ProviderUserKey? –
Sì, anche i due sono uguali. Puoi usare quello che preferisci con lo stesso risultato. –