我想問一個簡單的問題,它似乎是我找不到答案的。這裏的JIST,我想用比其他Context.ConnectionId的唯一值,用於識別用戶SignalR - 將未經認證的用戶映射到自定義ID
所以,在我的HUB類我有這樣的方法來生成一個唯一的GUID,當我開始連接調用此方法通過我的javascript
// My hub class
//...
public void GenerateGuid()
{
var guid = Guid.NewGuid().ToString();
Clients.Caller.myGuid(guid);
}
。
// My javascript
$.connection.hub.start().done(function(){
$.connection.chatHub.server.generateGuid();
});
$.connection.chatHub.client.myGuid = function (guid){
if (docCookies.getItem("guid") === null){
docCookies.setItem("guid", guid);
}
}
我還設置了IUserIdProvider(在這些文檔https://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections#IUserIdProvider建議使用比IPrincipal.Identity.Name以外的東西(因爲我的不對用戶進行認證這無論如何都不會工作)的定製實施者)
我認爲這需要一點點修改,因爲我不能確定如何在一個GUID沒有定義
public class MyUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
try
{
if (request.Cookies["guid"] != null)
{
return request.Cookies["guid"].Value;
}
}
catch (KeyNotFoundException kex)
{
// what to return here?
return Guid.NewGuid().ToString();
}
// what to return here?
return "";
}
}
的情況下返回。 (這是建立在我的Startup.cs所以不用擔心要麼)
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider),() => new MyUserIdProvider());
所以,有了這一切,我想有兩個問題
- 我是不是設置了我
MyUserIdProvider
類以正確的方式嗎? - 當我想要在我的Hub類中訪問用戶的ID時,我該如何訪問它?我不認爲我可以在調用像這樣使用
Context.ConnectionId
了:return Groups.Add(Context.ConnectionId, [room]);