This article描述了如何使用IUserIdProvider接口。它显示了如何使用GlobalHost来使SignalR使用您的用户ID提供程序。但是SignalR for .Net Core没有GlobalHost。什么是替代品?
答案 0 :(得分:3)
您需要实现IUserIdProvider
。
public class MyCustomProvider : IUserIdProvider
{
public string GetUserId(HubConnectionContext connection)
{
...
}
}
然后您需要在Startup
中注册它以进行依赖项注入:
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddSingleton<IUserIdProvider, MyCustomProvider>();
}
然后SignalR
将在HubEndPoint.OnConnectedAsync()
之类的事件中使用您的UserIdProvider
答案 1 :(得分:1)
在.Net核心中,您具有DI注入服务Microsoft.AspNet.SignalR.Infrastructure.IConnectionManager
,可在其中获取上下文。
例如,要使用连接管理器,请使用:
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Infrastructure;
using Microsoft.AspNet.Mvc;
public class TestController : Controller
{
private IHubContext testHub;
public TestController(IConnectionManager connectionManager)
{
//get connection manager using HubContext
testHub = connectionManager.GetHubContext<TestHub>();
}
}
您甚至可以在中间件中获取上下文:
app.Use(next => (context) =>
{
var hubContext = (IHubContext<MyHub>)context
.RequestServices
.GetServices<IHubContext<MyHub>>();
//...
});
您可以阅读更多here。