如何在多租户应用程序中定义signalR MapHub路由

如何在多租户应用程序中定义signalR MapHub路由,signalr,asp.net-core-signalr,Signalr,Asp.net Core Signalr,SignalR ChatHub被定义为控制器 [Route("{tenantName}/chatHub")] public class ChatHub: Hub 在启动配置方法中 app.UseSignalR(routes => { routes.MapHub<MessageHub>("/dev/chatHub"); }); app.usesigner(路由=> { routes.MapHub(“/dev/chatHub”); }); 这在开发环境中运行良好 我的问题是

SignalR ChatHub被定义为控制器

[Route("{tenantName}/chatHub")]
public class ChatHub: Hub
在启动配置方法中

app.UseSignalR(routes =>
{
 routes.MapHub<MessageHub>("/dev/chatHub");
});
app.usesigner(路由=>
{
routes.MapHub(“/dev/chatHub”);
});
这在开发环境中运行良好


我的问题是,如何定义useSignalR方法以使mapHub路径独立于租户,或者有一种不同的定义方式来处理所有租户,如
$“/{tenant}/chatHub”

,我已经用以下方式处理了这个问题; 创建了没有租户的chatHub控制器,如

[Route("/chatHub")]
public class ChatHub: Hub
在startup.cs中定义为

app.UseSignalR(routes =>
 {
     routes.MapHub<ChatHub>("/chatHub");
 });
app.usesigner(路由=>
{
routes.MapHub(“/chatHub”);
});
这样,公共实例就可以处理所有租户调用,并通过如下方法参数标识租户

公共异步任务SendMessage(字符串租户,字符串消息) { ...
}

我一直在研究这个问题,如果您使用Finbuckle作为您的多租户库,您可以使用以下内容来指定您的路由

app.UseSignalR(routes =>
{
     routes.MapHub<ChatHub>("/{__tenant__}/chatHub");
});
app.usesigner(路由=>
{
routes.MapHub(“/{uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu租户/chatHub”);
});

您尝试过吗?@davidfowl,不确定如何在启动时将tenantName作为变量传递。@davidfowl,startup.routes.MapHub(“/{tenantName}/chatHub”);你能提交一个你得到的异常问题吗?这目前不起作用,但我仍在调查,所以当我有解决方案时会发回