如何在.NET Core中使用IUserIdProvider?

时间:2018-08-22 11:50:33

标签: c# asp.net-core signalr signalr-hub

This article描述了如何使用IUserIdProvider接口。它显示了如何使用GlobalHost来使SignalR使用您的用户ID提供程序。但是SignalR for .Net Core没有GlobalHost。什么是替代品?

2 个答案:

答案 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