Фильтры ядра SignalR .net - PullRequest
       35

Фильтры ядра SignalR .net

0 голосов
/ 29 сентября 2019

Имеет ли SignalR параметры, аналогичные описанным для фильтров MVC здесь ?

С помощью MVC я могу создать фильтр действий (производный от IAsyncActionFilter) и использовать его в качестве атрибута в MVCmethod.

Например:

[ServiceFilter(typeof(MyCustomAsyncActionFilter))]
public async Task<IActionResult> GetAlbums() { }

В приведенном выше примере MyCustomAsyncActionFilter может быть реализован для обработки пользовательского кода, который необходимо выполнить перед выполнением метода.

Что эквивалентно вышесказанному при работе с методами SignalR?

1 Ответ

2 голосов
/ 30 сентября 2019

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<>));
...