使用ASP.NET Core托管Angular项目

问题描述

我有一个要托管的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;
     });                                       
});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...