RazorPages でリダイレクトする (301,302 リダイレクトの実装) - ASP.NET Core

RazorPages でリダイレクトを実装するコードを紹介します。

方法

RazorPagesでリダイレクトする場合は、OnGet() OnGet*() OnPost() OnPost*() メソッドで戻り値にIActionResultを返す記述にして、 戻り値に、Redirect() メソッドや RedirectPermanent() メソッドの戻り値を返します。
メモ
こちらの記事も参照してください。

リダイレクト (302リダイレクト) の実装

コード

ASP.NET Coreアプリケーションを作成し、以下のファイルを作成しコードを記述します。
/Pages/Redirect302.cshtml
@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model RazorPagesRedirect.Pages.Redirect301Model
@{
}
<html>
  <head></head>
  <body>
    <form method="post">
      <h2>302リダイレクトのデモ</h2>
      <input type="submit" value="Redirect"/>
    </form>
  </body>
</html>
/Pages/Redirect302.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RazorPagesRedirect.Pages
{
  public class Redirect302Model : PageModel
  {
    public void OnGet()
    {
    }

    public IActionResult OnPost()
    {
      return Redirect("https://www.ipentec.com");
    }
  }
}
Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
app.Run();

解説

OnPostメソッドを実装し、戻り値にRedirectメソッドの結果のRedirectResultオブジェクトを返します。Redirectメソッドの第一引数に、 リダイレクト先のページのURLを与えます。
  public IActionResult OnPost()
  {
    return Redirect("https://www.ipentec.com");
  }

フォームタグ内にサブミットボタンを配置します。フォームのメソッドがPOSTになっているため、サブミットボタンで POST処理が実行されます。RazorPagesでは、POSTされたタイミングでページモデルクラスのOnPost()メソッドが呼び出されます。
    <form method="post">
      <h2>302リダイレクトのデモ</h2>
      <input type="submit" value="Redirect"/>
    </form>

RazorPageのPOST処理を正しく動作させるためにはタグヘルパが必要です。タグヘルパーの追加の記述を忘れないようにします。
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

実行結果

プロジェクトを実行し、(アプリケーションルートURL)/Redirect302 のURLにアクセスします。下図のページが表示されます。 ページ内の[Redirect]ボタンをクリックします。


ページがリダイレクトされ、リダイレクト先のページが表示されました。


リダイレクトの種類を調べます。Webブラウザの開発ツールで、リダイレクト時のレスポンスを確認します。 Redirect302ページへPOST処理をしており、レスポンスで状態コード301が返り、リダイレクトしている動作が確認できます。

恒久的なリダイレクト (301リダイレクト) の実装

RedirectPermanent を利用します。
/Pages/Redirect302.cshtml
@page
@model RazorPagesRedirect.Pages.Redirect301Model
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
}
<html>
  <head></head>
  <body>
    <form method="post">
      <h2>301リダイレクトのデモ</h2>
      <input type="submit" value="Redirect"/>
    </form>
  </body>
</html>
/Pages/Redirect302.cshtml
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RazorPagesRedirect.Pages
{
  public class Redirect301Model : PageModel
  {
    public void OnGet()
    {
    }

    public IActionResult OnPost()
    {
      return RedirectPermanent("https://www.ipentec.com");
    }
  }
}

解説

ページの実装は先のデモと同じです。
    <form method="post">
      <h2>301リダイレクトのデモ</h2>
      <input type="submit" value="Redirect"/>
    </form>

ページモデルクラスのOnPost()メソッドでは、RedirectPermanent()メソッドの戻り値をOnPostメソッドの戻り値として返しています。
    public IActionResult OnPost()
    {
      return RedirectPermanent("https://www.ipentec.com");
    }

実行結果

プロジェクトを実行し、(アプリケーションルートURL)/Redirect301 のURLにアクセスします。下図のページが表示されます。 ページ内の[Redirect]ボタンをクリックします。


ページがリダイレクトされ、リダイレクト先のページが表示されました。


リダイレクトの種類を調べます。Webブラウザの開発ツールで、リダイレクト時のレスポンスを確認します。 Redirect301ページへPOST処理をしており、レスポンスで状態コード301が返り、リダイレクトしている動作が確認できます。


Razor Pagesで301, 302 のリダイレクト処理を実装できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-03-24
作成日: 2022-05-08
iPentec all rights reserverd.