Почему мне нужно вызвать UseSignalR перед UseSpa в Startup Configure - PullRequest
0 голосов
/ 17 марта 2019

У меня была неприятная проблема с использованием SignalR в веб-приложении .Net Core, которое использовало Angular в качестве SPA. При согласовании SignalR с клиента веб-сервер будет отвечать с ошибкой 404.

Точная проблема и решение описаны здесь в этом выпуске GitHub. https://github.com/aspnet/SignalR/issues/2528

Мой вопрос: почему важен порядок вызова UseSignalR и UseSpa? Почему это работает, и веб-сервер принимает клиентские сообщения SignalR ...

app.UseSignalR(routes => 
    { 
        ... 
    });

app.UseSpa(spa =>
    {
        ...
    });

и эта конфигурация приводит к тому, что веб-сервер отвечает 404

app.UseSpa(spa =>
    {
        ...
    });

app.UseSignalR(routes => 
    { 
        ... 
    });

1 Ответ

1 голос
/ 17 марта 2019

Если вы прочитали документацию для SpaApplicationBuilderExtensions.UseSpa, вы ясно увидите:

Обрабатывает все запросы с этой точки в цепочке промежуточного программного обеспечения, возвращая страницу по умолчанию для SinglePage Application (SPA).

Это промежуточное ПО следует размещать в конце цепочки, чтобы другое промежуточное ПО для обслуживания статических файлов, действий MVC и т. Д. Имело приоритет.

ИтакSpaMiddleware перехватывает каждый запрос, поступающий в его точку конвейера, и пытается обработать его как запрос к главной странице SPA (Angular / React / other).

порядок всегда очень важен: ASP.NET Core использует конвейер, поэтому каждое промежуточное ПО, которое вы помещаете в этот конвейер, выполняется в последовательности .Если промежуточное программное обеспечение обрабатывает запрос, не вызывая оставшуюся часть конвейера, тогда запрос останавливается и возвращается ответ.

...