在单个 ASP.NET Core 3.1 Web API 中管理两个 SPA;一个在根目录中,另一个在“管理员”路由中
Posted
技术标签:
【中文标题】在单个 ASP.NET Core 3.1 Web API 中管理两个 SPA;一个在根目录中,另一个在“管理员”路由中【英文标题】:Manage two SPA in a single ASP.NET Core 3.1 Web API; One in the root and the other in "admin" route 【发布时间】:2021-10-04 18:04:08 【问题描述】:我有这个被 2 个 SPA Angular 应用程序使用的 ASP.NET Core 3.1 Web API 应用程序;一个在“app”路由中,另一个在“admin”路由中。
路由代码如下:
app.Map("/app", client => // =======> changed to "/" but no used
client.UseSpa(spa =>
spa.Options.SourcePath = "app";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "app")),
;
);
).Map("/admin", admin =>
admin.UseSpa(spa =>
spa.Options.SourcePath = "admin";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "admin")),
;
);
);
我需要转到根目录中的第一个应用程序(app)。我尝试将路由“/app”更改为“/”,但没有成功。
【问题讨论】:
将管理员app.UseSpa
移至app.Map("/admin")
之后的应用部分。所以它应该看起来像app.Map("/admin", ...); app.UseSpa(/* config for app */)
【参考方案1】:
要以根目录服务主应用程序,请从 .Map()
分支中删除其 SPA 中间件,并将其移至管理应用程序的中间件之后。
// ...
app.Map("/admin", adminApp =>
adminApp.UseSpa(spa =>
spa.Options.SourcePath = "admin";
// ...
)
);
app.UseSpa(spa =>
spa.Options.SourcePath = "app";
// ...
);
// ...
所以当对/admin*
的请求到来时,它将跟随.Map("/admin")
创建的分支并由管理员SPA 中间件提供服务。
对于所有其他请求,将执行主分支,并为主应用程序提供服务。
【讨论】:
我的 Angular 项目呢?我应该使用 basehref="/app/" 来构建它吗?以上是关于在单个 ASP.NET Core 3.1 Web API 中管理两个 SPA;一个在根目录中,另一个在“管理员”路由中的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net core 3.1 保护 API 和 Web 应用程序
ASP.Net Core 3.1 - Web API 中的 Post 参数始终为 NULL
在测试 ASP.Net Core 3.1 Web Api 期间跳过 JWT Auth
我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?