c# - 如何在 ASP.NET Core 中处理多个 SPA 应用程序
问题描述
我有一个 ASP.NET Core Web API 应用程序,我想为两个 Angular 应用程序提供服务,一个用于管理员,一个用于用户。
在生产中,我不使用 Angular CLI 工具,因此只有两个 Angular Web 应用程序的一些静态文件。
管理员文件在/angular/admin
,用户文件在/angular/user
. 那么,我该如何为他们服务呢?
我尝试了多次调用,IServiceCollection.AddSpaStaticFiles
但它们相互覆盖。[从源代码库我发现这是单例服务]
解决方案
您必须将应用程序中间件管道分成两部分并在设置 MVC 后注册 SPA
...
app.UseMvc(...)
app.Map("/admin",
adminApp =>
{
adminApp.UseSpa(spa =>
{
spa.Options.SourcePath = "angular/admin";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "angular", "admin"))
};
if (env.IsDevelopment())
spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
});
});
app.Map("/user",
userApp =>
{
userApp.UseSpa(spa =>
{
spa.Options.SourcePath = "angular/user";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "angular", "user"))
};
if (env.IsDevelopment())
spa.UseProxyToSpaDevelopmentServer("http://localhost:4201");
});
});
```
推荐阅读
- python - 将y轴的整数转换为日期
- python - 为什么我在循环中运行一个简单的函数时会出现类型错误?
- python - 打开 exe 文件时 subprocess.run 抛出未找到错误 heroku
- blockchain - 没有费用的黑白签名 txns 和带有签名有效负载的未签名 txns 的区别是什么?
- reactjs - 如何在我的项目中实现 react-google-maps DirectionsRenderer
- reactjs - 尝试添加下载按钮
- python - 为什么当其他文件在 Heroku 中使用我的模型时我无法迁移?
- jquery-ui - 当光标通过结果下拉列表上下移动时,jquery自动完成处理事件
- javascript - 如何访问 d3.js 中多折线图的双嵌套数组?
- android - Android Kotlin Volley How to get value from JSONArray