9

Ho bisogno di accedere all'utente attualmente connesso nel mio filtro azione. L'identità è impostata da un DelegatingHandler oltre la catena di esecuzione.WebApi ActionFilterAttribute, HttpActionContext nome utente di accesso (IPrincipal)

ho posso accesso alla corrente IPrincipal utilizzando HttpContext.Current.User. Finora ho evitato di usare HttpContext.Current come mi sembrava essere di cattivo gusto. Prima di tutto il tuo codice funzionerà solo se ospitato in IIS e in secondo luogo include un riferimento a System.Web che immagino non guasta ma preferirei restare con System.Net.Http se possibile. È semplicemente sbagliato fare affidamento sul buon vecchio "HttpContext".

C'è un altro modo per accedere all'identità dell'utente all'interno di ActionFilter? O è corretto utilizzare HttpContext se non si prevede di eseguire un'applicazione auto-ospitata?

+0

Dannazione .. Ho davvero cercato accuratamente prima di pubblicare la domanda. 5 minuti dopo ho due risposte di lavoro :( – lapsus

risposta

16

Ho trascurato l'ovvio. Non avevo realizzato che esistesse una proprietà Controller all'interno dello ControllerContext.

var username = ((ApiController)context.ControllerContext.Controller).User.Identity.Name; 
+11

in Web API v2 'actionContext.RequestContext.Principal' farà il trucco. – cleftheris