AFAIK, пока в SignalR Core нет функции, подобной конвейерам-концентраторам ASP.NET SignalR (см. Эту проблему GitHub ), и фильтры MVC не применяются к SignalR.
Обходной путьможет быть реализовать собственный HubDispatcher и переопределить метод DispatchMessageAsync:
public class CustomHubDispatcher<THub> : DefaultHubDispatcher<THub> where THub : Hub
{
public CustomHubDispatcher(
IServiceScopeFactory serviceScopeFactory,
IHubContext<THub> hubContext,
IOptions<HubOptions<THub>> hubOptions,
IOptions<HubOptions> globalHubOptions,
ILogger<CustomHubDispatcher<THub>> logger) : base(serviceScopeFactory, hubContext, hubOptions, globalHubOptions, logger)
{
}
public override Task DispatchMessageAsync(HubConnectionContext connection, HubMessage hubMessage)
{
switch (hubMessage)
{
case InvocationMessage invocationMessage:
{
// do something here
break;
}
}
return base.DispatchMessageAsync(connection, hubMessage);
}
}
и использовать его в ConfigureServices:
services.AddSignalR();
services.AddSingleton(typeof(HubDispatcher<>), typeof(CustomHubDispatcher<>));