9

내 액션 필터에 현재 로그인 한 사용자에게 액세스해야합니다. 신원은 DelegatingHandler에 의해 실행 체인을 더 멀리하여 설정됩니다.WebApi ActionFilterAttribute, HttpActionContext 액세스 사용자 이름 (IPrincipal)

내가 액세스 현재 IPrincipalHttpContext.Current.User를 사용하여. 지금까지 나는 나쁜 스타일로 등장하여 HttpContext.Current을 사용하는 것을 피했습니다. 우선 모든 코드는 IIS에서 호스트되는 경우에만 작동하며 두 번째로 System.Web에 대한 참조를 포함합니다.하지만 상처는주지 않지만 가능한 경우 System.Net.Http을 사용하는 것이 좋습니다. 좋은 오래된 "HttpContext"에 의존하는 것이 잘못되었다고 느낍니다.

ActionFilter 내에서 사용자의 신원 정보에 액세스 할 수있는 다른 방법이 있습니까? 또는 자체 호스팅 응용 프로그램을 실행할 계획이 없다면 HttpContext을 사용해도됩니까?

+0

젠장. 나는 정말로 질문을 게시하기 전에 철저히 조사했다. 5 분 후 나는 두 개의 작동하는 답변을 가지고있다 : ( – lapsus

답변

16

나는 분명히 간과했다. ControllerContext 안에 Controller 속성이 있다는 것을 몰랐습니다.

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

Web API v2에서'actionContext.RequestContext.Principal'이 트릭을 할 것이다. – cleftheris

관련 문제