J'ai une application Angular 5 que je souhaite héberger avec Angular Universal sur ASP.net Core à l'aide du dernier modèle angulaire RC .J'ai suivi la documentation et que l'application est en marche. Le problème est que j'utilise aussi les outils i18n tools d'Angular, qui produisent plusieurs applications compilées, une par langue. Hébergez chacun de https://myhost.com/{locale}/
.
Je sais que je peux créer une instance de l'application ASP.net Core pour chaque paramètre régional et configurer l'hébergement sur le serveur Web afin de définir l'itinéraire approprié pour accéder à l'application associée, mais cela me semble excessif.
Les itinéraires sont configurés avec:
// app is an instance of Microsoft.AspNetCore.Builder.IApplicationBuilder
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
SpaServices sont configurés avec:
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");
}
});
J'ai consulté la documentation et les sources sur Github et je ne trouve pas comment configurer ASP.net Core pour associer une route spécifique à un SPA donné. Quelqu'un a des idées?
Merci à SteveSandersonMS et chris5287 à Github pour m'avoir indiqué la solution à ce sujet.
IApplicationBuilder.Map
peut séparer les chemins en différents domaines de préoccupation. Si vous enregistrez un appel à app.UseSpa
dans un appel à app.Map
, le SPA ne sera traité que pour le chemin spécifié par l’appel Map
. Le app.UseSpa
appel finit par ressembler à:
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=/");
}
});
});
Vous pouvez faire autant d'appels à app.Map
si nécessaire pour configurer vos SPA. Notez également la modification du spa.UseAngularCliServer
appel à la fin: vous devrez définir --base-href
et --serve-path
pour correspondre à votre configuration particulière.