2011-09-02 5 views
11

SignalR을 사용하여 MVC3 애플리케이션에서 클라이언트의 클릭을 처리하고 있습니다.컨트롤러 외부에서 로그인 한 사용자에게 어떻게 액세스합니까?

사용자가 뭔가를 클릭 할 때마다 로그인 한 사용자를 확인해야합니다. 이것이 MVC3 컨트롤러 내부에 있다면

, 나는 갈 것 :

if (User.Identity.IsAuthenticated) 
{ 
    string username = User.Identity.Name; 

    //My code here. 
} 

그러나,이 코드 실행은 Controller 클래스 내에서이 아니다.

기본적으로 컨트롤러 외부에서 로그인 한 사용자 이름에 액세스하려면 어떻게해야합니까?

답변

14

기본적으로 컨트롤러 외부에서 로그인 한 사용자 이름에 액세스하려면 어떻게해야합니까?

어디서 액세스하고 싶은지에 따라 다릅니다. HttpContext에 액세스 할 수 없다면 항상 HttpContext.Current.User을 시도하고 다른 스레드 또는 다른 것과 같이 어떤 이유로 인해 null이 아니도록기도 할 수 있습니다. 이것은 Tasks와 많은 비동기 처리에 의존하는 SignalR로 특히 더 가능합니다.

public class Chat: Hub 
{ 
    public void Foo() 
    { 
     string username = Context.User.Identity.Name; 
    } 
} 

가 개인적으로 나는 당신이 이제까지 HttpContext.Current를 사용하는 것이 좋습니다 않을 것이다 : 그것은 SignalR의 허브 내부에있는 경우 사용자에 액세스 할 수 있습니다. 정확히 무엇을 성취하려고하는지에 따라 그리고 내가 당신에게 더 나은 방법이 있음을 보장합니다.

+0

나는 그것을 HttpContext.Current를 사용하여 시험해 보았다. 당신이 묘사하는 몇 가지 함정은 무엇입니까? 컨텍스트가 null 일 때 어떻게됩니까? 왜 내가 이것을 사용하지 말라고 권유합니까? –

+0

@Sergio Tapia, 실행중인 코드가 예를 들어 일부 백그라운드 스레드에 있으면 컨텍스트가 null이됩니다. 당신은 내 질문에 대답하지 않았다.이 정보에 어디에서 접근하려고 하는가? –

+0

아하, 당신이 말하는 것을 본다. Context는 Hub 클래스의 일부이다. 너가 말하는게 이거니? 나는'HttpContext' 대신'Context'를 사용해야합니까? –

관련 문제