ASP.NET Core Razor Pagesでのルーティング設定につまづいたので手順を残しておきます。
ASP.NET Core MVCをよく使うため、単純に慣れの問題。
RazorPagesRouteSample |--Areas | |--Identity | | |--Data | | | |--RazorPagesRouteSampleIdentityDbContext.cs | | |--IdentityHostingStartup.cs | | |--Pages | | | |--Account | | | | |--Login.cshtml | | | | |--Login.cshtml.cs | | | |--_ValidationScriptsPartial.cshtml | | | |--_ViewStart.cshtml |--Pages | |--_ViewImports.cshtml | |--_ViewStart.cshtml | |--Error.cshtml | |--Error.cshtml.cs | |--Index.cshtml | |--Index.cshtml.cs | |--Privacy.cshtml | |--Privacy.cshtml.cs | |--Shared | | |--_CookieConsentPartial.cshtml | | |--_Layout.cshtml | | |--_LoginPartial.cshtml | | |--_ValidationScriptsPartial.cshtml | |--YourVoice.cshtml | |--YourVoice.cshtml.cs |--Program.cs |--RazorPagesRouteSample.csproj |--Startup.cs
上記のディレクトリ構成の場合を例にする。
ページを別名でアクセス可能にするルーティング
例: Pages/Privacy.cshtml
へのアクセスを /SitePrivacy
で可能にする。
Startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AddPageRoute("/Privacy", "SitePrivacy/"); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
ページを別名でアクセス可能にするルーティング(パラメーター付き)
例: Pages/YourVoice.cshtml
へのアクセスを /Voice/{text?}
で可能にする。
Startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AddPageRoute("/YourVoice", "Voice/{text?}"); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
YourVoice.cshtml
@page "{text?}" //受けるパラメーターを定義
YourVoice.cs
public class YourVoiceModel : PageModel { public void OnGet(string text = null) //パラメーターを引数で受ける { } }
エリア内のページへのルーティング
例: Identity
エリアにあるログインページへのルーティング
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "Login/"); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
なお options.Conventions.AddPageRoute("/Identity/Account/Login", "Login/");
では正しいルーティング設定とならない。