首页 > 解决方案 > 如何在 ASP.NET Core 中处理多个 SPA 应用程序

问题描述

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

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

管理员文件在/angular/admin,用户文件在/angular/user. 那么,我该如何为他们服务呢?

我尝试了多次调用,IServiceCollection.AddSpaStaticFiles但它们相互覆盖。[从源代码库我发现这是单例服务]

标签: c#asp.net-core

解决方案


您必须将应用程序中间件管道分成两部分并在设置 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");
      });
  });  

                ```

推荐阅读