最新の AngularテンプレートRC を使用して、ASP.net CoreでAngular UniversalでホストするAngular 5アプリケーションがあります。私はドキュメントに従って、アプリケーションを稼働させました。問題は、Angularの i18n tools を使用していることです。これは、ロケールごとに複数のコンパイル済みアプリケーションを生成します。 https://myhost.com/{locale}/
からそれぞれをホストできるようにする必要があります。
各ロケールでASP.net Coreアプリのインスタンスを起動し、適切なパスが関連付けられたアプリにルーティングされるようにWebサーバーでホスティングを設定できることは知っていますが、これは私にとって過度に思えます。
ルートは次のもので構成されます。
// app is an instance of Microsoft.AspNetCore.Builder.IApplicationBuilder
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
SpaServicesは次のもので構成されます。
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");
}
});
Githubのドキュメントとソースを調べましたが、特定のルートを特定のSPAに関連付けるようにASP.net Coreを構成する方法を見つけることができません。誰にもアイデアはありますか?
SteveSandersonMS および chris5287 のおかげで、この問題の解決策を示してくれました。
IApplicationBuilder.Map
は、パスをさまざまな関心領域に分離できます。 app.UseSpa
への呼び出しでapp.Map
への呼び出しをラップすると、SPAはMap
呼び出しで指定されたパスに対してのみ処理されます。 app.UseSpa
呼び出しは次のようになります。
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=/");
}
});
});
SPAを構成するのに必要なだけapp.Map
を呼び出すことができます。最後のspa.UseAngularCliServer
呼び出しの変更にも注意してください。特定の構成に一致するように--base-href
と--serve-path
を設定する必要があります。