2012-08-26 8 views
24

私はsignalrとasp.net MVC3を使ってサンプルチャットアプリケーションを構築しています。ここで私のシグナルハブの外観は何ですか?signalR - ユーザー名を取得する

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(); 
} 
} 

私の問題は、ページが読み込まれたときにクラッシュしたことです。デバッガをステップ実行すると、ユーザーが既に認証されていても、HttpContext.Current.User.Identity.Nameがnullであることがわかりました。 Task Join()メソッドでユーザー名を取得するにはどうすればよいですか? SignalR hubsを使用している場合

+0

どの認証モードあなたは(フォーム、窓など)を使うのですか?ユーザーが認証されていますか?新しいイントラネットmvc3アプリケーションでは、 'HttpContext.Current.User'と' Context.User'の両方がnullでなく、現在のユーザを含んでいます。 – nemesv

+0

@nemesv - 私のアプリケーションはフォーム認証を使用しており、インターネットアプリケーションです。 signalrを使用するページにアクセスできるのは、ユーザーが認証されている場合のみです。 –

+0

こんにちは@ user1、signalRを使用して複数のチャットルームのデモを提供できますか?私はchat.stackoverflow.comのようなチャットサーバーを実装したい –

答えて

20

あなたはにHubCallerContext.Userプロパティを使用することができます。

初期のHTTP要求の一部であったユーザーを取得します。

そうでそれを試してみてください。

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

HubCallerContextと入力します。インテリセンスには2つの方法しか表示されません - "Equals"と "ReferenceEquals"。私はsignalrのバージョンを使用しています。0.5.3 –

+0

いいえ、私のサンプルのように 'Hub'の' Context'プロパティを使う代わりに 'HubCallerContext'をタイプする必要はありません:' string username = this.Context.User.Identity .Name; 'あなたが既に' Context.ConnectionId'で行っているように。私は答えをもっと明確にするように更新しました。 – nemesv

+3

私はあなたのコードスニペットを試みましたが、Context.User.Identity.Nameはまだデバッガをステップ実行するとnullです。何かご意見は? –

関連する問題