问题描述
我有一个要托管的Angular项目。在Angular的asp.net核心Web项目中有一个模板。我研究了模板,并为ASP.NET Core创建了一个空模板项目,并安装了必需的软件包(如SPA和所有其他软件包)。现在,我想通过.net托管Angular项目(不在.net项目的目录中)。项目。
这里的问题是我没有这个Angular项目的源代码。我们仅从Nexus获得二进制软件包。 我观察到在startup.cs文件中,我们可以提供项目的源路径。像这样
spa.Options.sourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
从此文件夹中,打开package.json文件,并查找启动命令并进行投放。 此外,它还会询问其根路径。
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
}
我不知道这部分。我的理解是,在这里使用dist文件夹之前必须先通过配置创建它。如果源路径ID与ClientApp不同,我也不知道如何正确配置它。我们可以使用任何此类设置并使其正常工作吗?最终目标是使用来自asp.net核心项目的HTTP.SYS托管Angular项目。 这可能吗? 最好的方法是什么?
解决方法
静态文件通常默认位于webroot(wwwroot)文件夹中。那是我们可以直接从文件系统提供文件的地方。
但是您可以在startup.cs
// using Microsoft.Extensions.FileProviders;
// using System.IO;
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.ContentRootPath,"MyStaticFiles")),RequestPath = "/StaticFiles"
});
对于单页应用程序,您可以执行以下操作:
app.Map(new PathString(""),client =>
{
var clientPath = Path.Combine(Directory.GetCurrentDirectory(),"./ClientApp/dist");
StaticFileOptions clientAppDist = new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(clientPath)
};
client.UseSpaStaticFiles(clientAppDist);
client.UseSpa(spa =>
{
spa.Options.DefaultPageStaticFileOptions = clientAppDist;
});
});