ASP.NET Core

ASP.NET Core Razor Pages - ルート直下のパスと特定ページ(cshtml)をマッピングする方法

2022年1月8日

例えば、アプリケーションのルート直下に、Users フォルダの Index.cshtml をマッピングする方法です。

URL:https://localhost:44306/abc

→ abc はユーザー名です。

サービスの設定

Program.cs を編集します。AddRazorPagesOptions に、Conventions.AddPageRoute メソッドで、Users フォルダの index.cshtml と、 ルート直下 + パラメータ(ここでは name)の組み合わせをマッピングします。

//Program.cs
builder.Services.AddRazorPages().AddRazorPagesOptions(options =>
{
    options.Conventions.AddPageRoute("/Users/Index", "/{name}");
});

cshtml の実装

Users\Index.cshtml にて、@page の後に、パラメータである "{name}" を追記します。

<!-- Users\Index.cshmlt -->
@page "{name}"
@model ProjectX.Pages.Users.IndexModel
@{
}

<div>
	User page here...
</div>
<div>
	ユーザー名:@Model.UserName
</div>

cshtml.cs の実装

そして、Index.cshtml.cs の OnGet メソッドで name パラメータを受け取れるように変更します。

//Index.cshtml.cs

public class IndexModel : PageModel
{
    public string UserName { get; set; }
    public void OnGet(string name)
    {
        UserName = name;
    }
}

実行結果の確認

アプリケーションを実行し、https://localhost:44306/abc を開くと、Users\Index.cshtml が呼び出され、パラメータも取得できていることが分かります。

参考情報:Razor Pages routing with a prefix id

-ASP.NET Core