9

Ich muss auf den aktuell angemeldeten Benutzer in meinem Aktionsfilter zugreifen. Die Identität wird durch eine DelegatingHandler weiter oben in der Kette der Ausführung festgelegt.WebApi ActionFilterAttribute, HttpActionContext Zugriff Benutzername (IPrincipal)

I kann Zugriff auf die aktuellen IPrincipalHttpContext.Current.User verwenden. Bisher habe ich vermieden, HttpContext.Current zu verwenden, da es mir schien, schlechter Stil zu sein. Zunächst wird Ihr Code nur funktionieren, wenn in IIS gehostet und zweitens enthält es einen Verweis auf System.Web, die ich schätze, tut nicht weh, aber ich würde lieber mit System.Net.Http bleiben, wenn möglich. Es fühlt sich einfach falsch an, sich auf gute alte "HttpContext" zu verlassen.

Gibt es eine andere Möglichkeit, auf die Identität des Benutzers innerhalb einer ActionFilter zuzugreifen? Oder ist es in Ordnung, HttpContext zu verwenden, wenn Sie keine selbst gehostete Anwendung ausführen möchten?

+0

Verdammt .. Ich habe wirklich gründlich gesucht, bevor Sie die Frage posten. 5 Minuten später habe ich zwei funktionierende Antworten :( – lapsus

Antwort

16

Ich übersah das Offensichtliche. Ich wusste nicht, dass es eine Controller-Eigenschaft innerhalb der ControllerContext gab.

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

in Web API v2 'actionContext.RequestContext.Principal' wird den Trick tun. – cleftheris

Verwandte Themen