RazorPagesで指定したページ名のページにリダイレクトする - ASP.NET Core

RazorPagesで指定したページ名のページにリダイレクトするコードを紹介します。

概要

こちらの記事ではRazorPagesで指定したURLにリダイレクトするコードを紹介しました。
URLを指定したリダイレクトは遷移先がわかりやすいメリットがありますが、アプリケーションを配置するドメインやディレクトリが違う場合に、 URLを変更する必要があることや、ルーティングの設定が変化した場合、設定の変更に合わせてURLも変更する必要があり、管理がしにくいデメリットもあります。

ページ名を指定してリダイレクトをする方法では、るーてぃぐの設定が変化した場合や、配置ディレクトリが変化した場合でも、リダイレクトの設定を変更せずに対応できます。
この記事では、RedirectToPageメソッドを利用した、ページ名を指定したリダイレクトのコードを紹介します。
補足
RazorPageのページ名を指定したリダイレクトのため、リダイレクト先はアプリケーション内のページのみとなります。 アプリケーション外のページや別ドメインのページにリダイレクトする場合は、 こちらの記事のURLを指定したリダイレクトを使用します。
メモ

書式

  public IActionResult OnPost()
  {
    return RedirectToPage("/dest-plain");
  }
  public IActionResult OnPost()
  {
    return new RedirectToPageResult("/dest-plain");
  }

書式:301リダイレクトの場合

301リダイレクトする場合は、 RedirectToPageメソッドを利用している場合は、 RedirectToPagePermanent メソッドに変更します。 RedirectToPageResultオブジェクトを作成する方式の場合は、RedirectToPageResultオブジェクトのコンストラクタの第四引数にtrueを指定します。
  public IActionResult OnPost()
  {
    return RedirectToPagePermanent("/dest-plain");
  }
  public IActionResult OnPost()
  {
    return new RedirectToPageResult("/dest-plain",null,null, true);
  }

例1: RedirectToPage メソッドを利用する

コード

main-redirect-to-page.cshtml
@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model RedirectPage.Pages.main_redirect_to_pageModel
@{
}
<html>
<head>
  <meta name="viewport" content="width=device-width" />
  <title></title>
</head>
<body>
  <div>リダイレクトのデモ (RedirectToPage)</div>
  <form method="post">
    <button>リダイレクト</button>
  </form>
</body>
</html>
main-redirect-to-page.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RedirectPage.Pages
{
  public class main_redirect_to_pageModel : PageModel
  {
    public void OnGet()
    {
    }
    public IActionResult OnPost()
    {
      return RedirectToPage("/dest-plain");
      //return RedirectToPagePermanent("/dest-plain"); // 301 リダイレクトの場合
    }
  }
}

リダイレクト先のdest-plain.cshtml ページを作成します。
dest-plain.cshtml
@page
@model RedirectPage.Pages.dest_plainModel
@{
}
<!DOCTYPE html>

<html>
<head>
  <meta name="viewport" content="width=device-width" />
  <title>Destination Plain</title>
</head>
<body>
  リダイレクト先のページです。
</body>
</html>

解説

ページの[リダイレクト]ボタンをクリックすると、ページもデルクラスのOnPost()メソッドを呼び出します。
OnPostメソッド内で、RedirectToPage()メソッドを呼び出します。第一引数に遷移するRazorPageの名称を与えます。 今回の例の場合、/Pages/dest-plain.cshtml ファイルのページが遷移先のため、/dest-plain を与えます。
301リダイレクトの場合は、RedirectToPagePermanent()メソッドを呼び出します。

実行結果

プロジェクトを実行します。Webブラウザで(アプリケーションルートURL)/main-redirect-to-page にアクセスします。 下図のページが表示されます。


[リダイレクト]ボタンをクリックします。リダイレクト処理でページ遷移します。


なお、301リダイレクトのコードを利用した場合は、リダイレクトのコードが301になります。
301リダイレクトの場合
301リダイレクトの場合


例2: RedirectToPageResult オブジェクトを利用する

コード

main-redirect-to-page-result.cshtml
@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model RedirectPage.Pages.main_redirect_to_page_resultModel
@{
}
<html>
<head>
  <meta name="viewport" content="width=device-width" />
  <title></title>
</head>
<body>
  <div>リダイレクトのデモ (RedirectToPageResult)</div>
  <form method="post">
    <button>リダイレクト</button>
  </form>
</body>
</html>
main-redirect-to-page-result.cshtml/cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RedirectPage.Pages
{
  public class main_redirect_to_page_resultModel : PageModel
  {
    public void OnGet()
    {
    }

    public IActionResult OnPost()
    {
      return new RedirectToPageResult("/dest-plain");
      //return new RedirectToPageResult("/dest-plain",null,null, true); // 301 リダイレクトの場合
    }

  }
}

リダイレクト先のdest-plain.cshtml ページを作成します。
dest-plain.cshtml
@page
@model RedirectPage.Pages.dest_plainModel
@{
}
<!DOCTYPE html>

<html>
<head>
  <meta name="viewport" content="width=device-width" />
  <title>Destination Plain</title>
</head>
<body>
  リダイレクト先のページです。
</body>
</html>

解説

ページの[リダイレクト]ボタンをクリックすると、ページもデルクラスのOnPost()メソッドを呼び出します。
OnPostメソッド内で、RedirectToPageResultオブジェクトを作成します。第一引数に遷移するRazorPageの名称を与えます。 今回の例の場合、/Pages/dest-plain.cshtml ファイルのページが遷移先のため、/dest-plain を与えます。
301リダイレクトする場合は、第四引数にtrueを与えます。

実行結果

プロジェクトを実行します。Webブラウザで(アプリケーションルートURL)/main-redirect-to-page-result にアクセスします。 下図のページが表示されます。


[リダイレクト]ボタンをクリックします。リダイレクト処理でページ遷移します。

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