9

Potrzebuję uzyskać dostęp do aktualnie zalogowanego użytkownika w moim filtrze działania. Tożsamość jest ustalana przez łańcuch wykonawczy.WebApi ActionFilterAttribute, nazwa użytkownika dostępu HttpActionContext (IPrincipal)

I może dostęp obecny IPrincipal użyciu HttpContext.Current.User. Do tej pory unikałem używania HttpContext.Current, ponieważ wydawało mi się to złym stylem. Przede wszystkim Twój kod działa tylko wtedy, gdy jest hostowany w IIS, a po drugie zawiera odniesienie do System.Web, które, jak sądzę, nie boli, ale wolę trzymać się z System.Net.Http, jeśli to możliwe. Po prostu nie można polegać na dobrym starym "HttpContext".

Czy istnieje inny sposób uzyskania dostępu do tożsamości użytkownika w postaci ActionFilter? Lub czy korzystanie z HttpContext jest w porządku, jeśli nie planujesz uruchomienia aplikacji hostowanej samodzielnie?

+0

Cholera ... Naprawdę naprawdę dokładnie przeszukałem przed opublikowaniem pytania. 5min później mam dwie działające odpowiedzi :( – lapsus

Odpowiedz

16

Przeoczyłem oczywistość. Nie zdawałem sobie sprawy, że istnieje właściwość kontrolera wewnątrz ControllerContext.

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

w Web API v2 'actionContext.RequestContext.Principal' zrobi lewy. – cleftheris

Powiązane problemy