过滤传出 SignalR Core Hub 消息

gui*_*ate 5 signalr signalr-hub asp.net-core-signalr .net-5

我正在使用 SignalR 和 .Net 5.0,并利用集线器过滤器对 SignalR Hub 的传入调用执行代码。

我正在寻找一种方法来对从集线器到客户端的传出消息执行相同的操作,但似乎没有其他选择。或者,我希望在发送内置Ping 消息时专门挂接并执行代码。

看起来旧版本的 HubPipeLineModule 中曾经可以实现类似的功能,但我无法找到任何方法在当前的 SignalR 中实现此目的。这可能吗?

小智 1

HubLifetimeManager负责向客户端发送消息,并且可以在注册 SignalR 之前注入您的自定义消息:

builder.Services.AddSingleton(typeof(HubLifetimeManager<>), typeof(CustomHubLifetimeManager<>));
builder.Services.AddSignalR();
Run Code Online (Sandbox Code Playgroud)

在哪里

public class CustomHubLifetimeManager<THub> : DefaultHubLifetimeManager<THub> where THub : Hub
{
     public override Task SendAllAsync(string methodName, object?[] args, CancellationToken cancellationToken = default)
    {
        //todo: do your stuff
        return base.SendAllAsync(methodName, args, cancellationToken);
    }
    //todo: override rest of the methods
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是这种方法对我来说看起来有点老套。