如何在ASP.NET Core中处理多个SPA应用程序

时间:2019-06-06 17:25:38

标签: c# asp.net-core

我有一个ASP.NET Core Web API应用程序,我想提供两个Angular应用程序,一个用于管理员,一个用于用户。

在生产中,我不使用角度CLI工具,因此只有两个角度Web应用程序的一些静态文件。

管理文件位于/angular/admin中,用户文件位于/angular/user中。 那么,我该如何为他们服务?

我尝试了多次对IServiceCollection.AddSpaStaticFiles的调用,但它们相互覆盖。 [从源存储库中,我发现这是Singleton服务]

2 个答案:

答案 0 :(得分:1)

设置MVC后,您必须将应用程序中间件管道分成两个分支并注册SPA

 ...
 app.UseMvc(...)

 app.Map("/admin",
   adminApp =>
   {
     adminApp.UseSpa(spa =>
     {
       spa.Options.SourcePath = "angular/admin";
       spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
       {
           FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "angular", "admin"))
       };

       if (env.IsDevelopment())
         spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
      });
    });

  app.Map("/user",
    userApp =>
    {
      userApp.UseSpa(spa =>
      {
        spa.Options.SourcePath = "angular/user";
        spa.Options.DefaultPageStaticFileOptions = new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "angular", "user"))
        };

        if (env.IsDevelopment())
          spa.UseProxyToSpaDevelopmentServer("http://localhost:4201");
      });
  });  

                ```

答案 1 :(得分:0)

另一个提示:我正在使用react,react-router无法正确处理URL中的路径。所以我将不同的端口用于不同的水疗中心。使用“ app.MapWhen(o => o.Request.Host == 6000,...)”来处理这种情况。

在生产中,应该类似于:MapWhen(o => o.Request.Host.Host ==“ a.com” ...