Razor PagesでRequestオブジェクトからルートパラメーターを取得する - ASP.NET Core

Razor Pagesでルートパラメーター、拡張URLパスを取得するコードを紹介します。

概要

RazorPagesでは、OnGet, OnPostにパラメーターを記述することで、URLのルートパラメーター(拡張URLパス)を取得できます。 (コードはこちらの記事を参照)
通常は、OnGet,OnPostのパラメーターで取得する方法が扱いやすいですが、従来のWebFormアプリケーションと同じようにRequestオブジェクトから ルートパラメーターを取得したい場合があります。 この記事では、RouteValuesオブジェクトを利用して、ルートパラメーターを取得するコードを紹介します。

書式

Request.RouteValues["(パラメーター名)"]

プログラム例

ASP.NET Coreアプリケーションを作成し、以下のファイル、コードを作成します。

コード

Pages/UsingRouteValues01.cshtml
@page "/UsingRouteValues01/{mode}/{id:int}"
@model GetUrlParameter.Pages.UsingRouteValues01Model
@{
}
<html>
  <head>

  </head>
  <body>
    <h1>Request.RouteValuesでのルートパラメーター取得のデモ</h1>
    <p>@Model.ModeOutput</p>
    <p>@Model.IDOutput</p>
  </body>
</html>
Pages/UsingRouteValues01.cshtml.cs
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace GetUrlParameter.Pages
{
  public class UsingRouteValues01Model : PageModel
  {
    public string ModeOutput { get; set; }
    public string IDOutput { get; set; }

    public void OnGet()
    {
      if (Request.RouteValues["mode"] != null) {
        string param_mode = Request.RouteValues["mode"].ToString();
        ModeOutput = string.Format("modeの値:{0}", param_mode);
      }

      if (Request.RouteValues["id"] != null) {
        int param_id = Convert.ToInt32(Request.RouteValues["id"].ToString());
        IDOutput = string.Format("id の値:{0:d}", param_id);
      }
    }
  }
}

解説

ルートパラメータは Request.RouteValues["(パラメーター名)"] で取得できます。 パラメーターの値は@pageディレクティブでint型で定義している場合でも、string型でRouteValuesオブジェクトに設定されます。
パラメーターがない場合は、nullの値になるため、nullチェックをしてから、文字列の処理をします。

実行結果

プロジェクトを実行し、(アプリケーションルートURL)/UsingRouteValues01/get/36 のURLにアクセスします。
RazorPageのUsingRouteValues01 の後ろの get がmodeパラメーターの値となり、36 がidパラメーターの値になります。 RouteValuesオブジェクトからルートパラメーターの値を取得し、ページに表示できている動作が確認できます。


URLを変更してみます。
(アプリケーションルートURL)/UsingRouteValues01/put/582 のURLにアクセスします。
ページに、modeの値として put が、idの値として 582 が表示されています。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-07-27
作成日: 2022-07-27
iPentec all rights reserverd.