为什么我需要在Startup Configure中的UseSpa之前调用UseSignalR

问题描述 投票:0回答:1

在使用Angular作为SPA的.Net Core Web应用程序中使用SignalR时遇到了令人沮丧的问题。在SignalR从客户端协商Web服务器将响应404错误。

此GitHub问题中描述了确切的问题和解决方案。 https://github.com/aspnet/SignalR/issues/2528

我的问题是,为什么调用UseSignalR和UseSpa的顺序很重要?为什么这样做,Web服务器接受SignalR客户端通信......

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

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

并且此配置导致Web服务器以404响应

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

app.UseSignalR(routes => 
    { 
        ... 
    });
asp.net-core signalr single-page-application
1个回答
1
投票

如果你read the documentationSpaApplicationBuilderExtensions.UseSpa,你清楚地看到:

通过返回单页应用程序(SPA)的默认页面处理中间件链中此点的所有请求。

这个中间件应放在链的后期,以便其他用于提供静态文件,MVC操作等的中间件优先。

因此,SpaMiddleware捕获到达管道点的每个请求,并尝试将其作为对SPA主页面的请求(Angular / React / other)处理。

顺序始终非常重要:ASP.NET Core使用管道,因此您放入此管道的每个中间件都按顺序执行。如果中间件在不调用管道的剩余部分的情况下处理请求,则请求在那里停止并返回响应。

© www.soinside.com 2019 - 2024. All rights reserved.