Asp.net-Core

Asp.net core 2.1 - 如何服務多個角度應用程序?

  • June 10, 2020

我正在嘗試從我的 .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:$$ MY PROJECT PATH $$\wwwroot\app
  • C:$$ MY PROJECT PATH $$\ wwwroot \ 管理員

但由於某種原因,管理應用程序可以工作,而該應用程序不能工作,而且它不支持預設頁面,所以我需要輸入帶有/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/">

引用自:https://stackoverflow.com/questions/55256426