pages - Cómo configurar el enrutamiento del servidor ASP.net Core para múltiples SPA alojados con SpaServices
razor pages español (1)
Gracias a SteveSandersonMS y chris5287 por Github por indicarme la solución a esto.
IApplicationBuilder.Map
puede segregar rutas en diferentes áreas de interés. Si app.UseSpa
una llamada a app.UseSpa
en una llamada a app.Map
, el SPA se manejará solo para la ruta especificada por la llamada del Map
. La llamada app.UseSpa
termina pareciéndose a:
app.Map("/app1", app1 =>
{
app1.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
spa.UseSpaPrerendering(options =>
{
options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.bundle.js";
options.BootModuleBuilder = env.IsDevelopment()
? new AngularCliBuilder(npmScript: "build:ssr:en")
: null;
options.ExcludeUrls = new[] { "/sockjs-node" };
options.SupplyData = (context, data) =>
{
data["foo"] = "bar";
};
});
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start --app=app1 --base-href=/app1/ --serve-path=/");
}
});
});
Puede hacer tantas llamadas a app.Map
como sea necesario para configurar sus SPA. También tenga en cuenta la modificación del spa.UseAngularCliServer
call al final: deberá configurar --base-href
y --serve-path
para que coincida con su configuración particular.
Tengo una aplicación Angular 5 que quiero alojar con Angular Universal en ASP.net Core utilizando la última plantilla de Angular RC . He seguido los documentos y tengo la aplicación en funcionamiento. El problema es que también estoy usando las herramientas i18n de Angular, que producen múltiples aplicaciones compiladas, 1 por localidad. Necesito poder alojar cada uno desde https://myhost.com/{locale}/
.
Sé que puedo activar una instancia de la aplicación Core de ASP.net para cada configuración regional y configurar el alojamiento en el servidor web para que tenga las rutas de acceso adecuadas a la aplicación asociada, pero esto me parece excesivo.
Las rutas se configuran con:
// app is an instance of Microsoft.AspNetCore.Builder.IApplicationBuilder
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
Los servicios de spa están configurados con:
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
spa.UseSpaPrerendering(options =>
{
options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.bundle.js";
options.BootModuleBuilder = env.IsDevelopment()
? new AngularCliBuilder(npmScript: "build:ssr:en")
: null;
options.ExcludeUrls = new[] { "/sockjs-node" };
options.SupplyData = (context, data) =>
{
data["foo"] = "bar";
};
});
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
He revisado la documentación y la fuente en Github, y no encuentro cómo configurar ASP.net Core para asociar una ruta específica con un SPA determinado. ¿Alguien tiene alguna idea?