2012-08-26 39 views
24

Tôi đang sử dụng signalr và asp.net MVC3 để tạo ứng dụng trò chuyện mẫu. Dưới đây là những gì trung tâm tín hiệu của tôi trông giống nhưsignalR - nhận tên người dùng

public class MyHub:Hub,IDisconnect 
{ 
public Task Join() 
{ 
    string username = HttpContext.Current.User.Identity.Name; 
    //find group based on username 
    string group = getGroup(username) 
    return Groups.Add(Context.ConnectionId, group); 
} 

public void doStuff() 
{ 
    string group = getGroup(); 
    Clients[group].doStuffOnBrowser(); 
} 
} 

Vấn đề của tôi là ứng dụng của tôi bị lỗi khi tải trang. trên bước thông qua với trình gỡ lỗi, tôi thấy rằng HttpContext.Current.User.Identity.Name là null mặc dù người dùng đã được xác thực. Làm cách nào để có được tên người dùng trong phương thức Task Join() của tôi?

+0

Những chế độ xác thực nào bạn sử dụng (hình thức, cửa sổ, vv)? Bạn có chắc chắn rằng người dùng được xác thực không? Vì trong một ứng dụng mvc3 intranet mới, cả hai 'HttpContext.Current.User' và' Context.User' không phải là null và chứa người dùng hiện tại. – nemesv

+0

@nemesv - Ứng dụng của tôi sử dụng xác thực biểu mẫu và là ứng dụng internet. Trang sử dụng signalr chỉ có thể được truy cập nếu người dùng được xác thực –

+0

Xin chào @ user1, bạn có thể cung cấp cho tôi bản trình diễn cho nhiều phòng trò chuyện sử dụng signalR hay không. Tôi muốn triển khai máy chủ trò chuyện như chat.stackoverflow.com –

Trả lời

20

Khi sử dụng SignalR hubs bạn có thể sử dụng tài sản để HubCallerContext.User:

Gets người sử dụng mà là một phần của yêu cầu http ban đầu.

Vì vậy, hãy thử nó với:

public Task Join() 
{ 
    string username = Context.User.Identity.Name; 
    //find group based on username 
    string group = getGroup(username) 
    return Groups.Add(Context.ConnectionId, group); 
} 
+0

khi tôi nhập HubCallerContext. intellisense chỉ hiển thị 2 phương thức - "Equals" và "ReferenceEquals". Tôi đang sử dụng phiên bản signalr 0.5.3 –

+0

Không, bạn không cần phải gõ 'HubCallerContext' thay vì sử dụng thuộc tính' Context' của 'Hub' như trong ví dụ của tôi:' string username = this.Context.User.Identity .Name; 'giống như bạn đã làm với' Context.ConnectionId'. Tôi đã cập nhật câu trả lời của mình để làm cho nó rõ ràng hơn. – nemesv

+3

Tôi đã thử đoạn mã của bạn nhưng Context.User.Identity.Name vẫn còn null khi tôi duyệt qua trình gỡ rối. Có suy nghĩ gì không? –

Các vấn đề liên quan