ASP.NET核心中间件MVC/React MapSpaFallbackRoute



我尝试设置一个.NET Core WebApplication,它使用SPA来服务应用程序的React部分,并为我的管理区域提供MVC。

React应用程序位于"/"MVC部分应在"/admin"中提供

我的中间件设置如下:

// Standard routing
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "admin/{controller=Home}/{action=Index}/{id?}");
});
// Fallback Route for /admin and /api
app.MapWhen(x => x.Request.Path.Value.ToLower().StartsWith("/admin") || x.Request.Path.Value.ToLower().StartsWith("/api"), builder =>
{
builder.UseMvc(routes =>
{
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
});
// use SPA for other requests
app.MapWhen(x => !(x.Request.Path.Value.ToLower().StartsWith("/admin") || x.Request.Path.Value.ToLower().StartsWith("/api")), builder =>
{
builder.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
});

这在我的机器上以开发模式(使用ReactDevelopmentServer(正常工作。

当我发布并发布它时,所有请求都会被路由到React(SPA(应用程序,从而使我的/admin MVC部分无法访问。

我的设置有什么问题?如果有任何提示,我将不胜感激。

谢谢!

天哪!

我发现了问题。它与Visual Studio创建的Boilerplate React代码有关:它使用了一个名为registerServiceWorker.js的文件,这简直是邪恶!它使用了一个该死的粘性浏览器缓存,使所有内容几乎都是静态的。

Visual Studio模板的.net部分是正确的,您只需使用标准中间件设置,所有非Spa请求都将按预期路由:

// Standard routing
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "admin/{controller=Home}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});

最新更新