0

我有一个我想托管的 Angular 项目。Angular 的 asp.net 核心 Web 项目中有一个模板。我研究了模板并为 ASP.NET 核心创建了一个空模板项目并安装了所需的包(如 SPA 和所有其他包)现在我想通过 .net 托管 Angular 项目(不在.net 项目的目录中)项目。

这里的问题是我没有这个 Angular 项目的源代码。我们只从 Nexus 获取二进制包。我观察到在 startup.cs 文件中我们可以提供项目的源路径。像这样的东西

    spa.Options.SourcePath = "ClientApp"; 
  if (env.IsDevelopment())
        {
             spa.UseAngularCliServer(npmScript: "start");
        }

从这个文件夹中,它打开 package.json 文件并找到启动命令并执行 mg 服务。它还询问它的根路径。

services.AddSpaStaticFiles(configuration =>
     {
        configuration.RootPath = "ClientApp/dist";
     });
  }

我不知道这部分。我的理解是,dist 文件夹必须先通过配置创建,然后才能在这里使用。如果源路径 id 与 ClientApp 不同,我也不知道如何正确配置它。我们可以使用任何这样的设置并使其工作吗?最终目标是使用来自 asp.net 核心项目的 HTTP.SYS 来托管 Angular 项目。这可能吗?做这个的最好方式是什么?

4

1 回答 1

0

默认情况下,静态文件通常位于 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;
     });                                       
});

于 2020-10-28T14:43:08.437 回答