asp.net-core - Asp.net core 2.1 - 如何服务多个角度应用程序?
问题描述
我正在尝试从我的 .net 核心服务中提供 2 个 Angular 应用程序,如下所示:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "wwwroot/app";
});
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "wwwroot/admin";
});
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.UseSpaStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=0");
}
});
app.UseMvc();
app.Map("/app", client =>
{
client.UseSpa(spa =>
{
spa.Options.SourcePath = "wwwroot/app";
});
}).Map("/admin", admin =>
{
admin.UseSpa(spa =>
{
spa.Options.SourcePath = "wwwroot/admin";
});
});
}
在文件系统中,我只有dist
这些应用程序的输出(因为它们是由另一个团队开发的)。所以它看起来像这样:
- C:[我的项目路径]\wwwroot\app
- C:[我的项目路径]\wwwroot\admin
但由于某种原因,管理应用程序可以工作,而该应用程序不能工作,而且它不支持默认页面,所以我需要输入带有/index.html
.
关于如何解决这个问题的任何想法?
解决方案
好吧,我终于解决了它,它的工作原理是这样的:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSpaStaticFiles();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.UseSpaStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
});
app.UseMvc();
app.Map("/app", client =>
{
client.UseSpa(spa =>
{
spa.Options.SourcePath = "wwwroot/app";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/app"))
};
});
}).Map("/admin", admin =>
{
admin.UseSpa(spa =>
{
spa.Options.SourcePath = "wwwroot/admin";
spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/admin"))
};
});
});
}
另外,不要忘记进入index.html
每个应用程序的文件并base
相应地设置标签,如下所示:
//for the client application:
<base href="/app/">
//for the admin application
<base href="/admin/">
推荐阅读
- oracle - 如何在两个字符串之间添加sql中的字符?
- c - 如何在这里打印我的结构的名称变量?
- ckeditor - CKEditor 4 忽略 uploadUrl 响应,仍然使用带有成功和错误消息的 blob URL
- google-visualization - 行而不是列中的 Google 可视化 API 系列数据。枢?
- android - 为什么 Firefox 移动地址栏在滚动时消失似乎对 100% 高度的 div 有影响?
- c# - C# 与 Double.GetHashCode() 的冲突
- c - 为什么 putchar() 在这个简单的代码中写一个新行?
- arrays - 返回相同元素的数组过滤器
- python - 无法将“/usr/bin/python3”符号链接到“/home/ubuntu/my-env/bin/python3”
- python - PyPDF2拆分pdf保持原始pdf格式