Asp.net 核心 2.1 - 如何为多个 angular 应用提供服务?
Asp.net core 2.1 - How to serve multiple angular apps?
我正在尝试通过我的 .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:[我的项目路径]\wwwroot\app
- C:[我的项目路径]\wwwroot\admin
但出于某种原因,管理应用程序可以运行,但该应用程序无法运行,而且它不支持默认页面,因此我需要输入 URL 和 /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/">
丽然回答了自己的问题。
在我的例子中,我有一个 vue cli 站点的多个入口点。修复与正确答案相同,但也设置 spa.Options.DefaultPage.
app
.Map("/login", admin =>
{
admin.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
spa.Options.DefaultPage = "/login.html";
});
})
.Map("", client =>
{
client.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
spa.Options.DefaultPage = "/index.html";
});
});
我正在尝试通过我的 .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:[我的项目路径]\wwwroot\app
- C:[我的项目路径]\wwwroot\admin
但出于某种原因,管理应用程序可以运行,但该应用程序无法运行,而且它不支持默认页面,因此我需要输入 URL 和 /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/">
丽然回答了自己的问题。 在我的例子中,我有一个 vue cli 站点的多个入口点。修复与正确答案相同,但也设置 spa.Options.DefaultPage.
app
.Map("/login", admin =>
{
admin.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
spa.Options.DefaultPage = "/login.html";
});
})
.Map("", client =>
{
client.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
spa.Options.DefaultPage = "/index.html";
});
});