RazorPages でリダイレクトを実装するコードを紹介します。
方法
RazorPagesでリダイレクトする場合は、
OnGet()
OnGet*()
OnPost()
OnPost*()
メソッドで戻り値にIActionResultを返す記述にして、
戻り値に、
Redirect()
メソッドや
RedirectPermanent()
メソッドの戻り値を返します。
リダイレクト (302リダイレクト) の実装
コード
ASP.NET Coreアプリケーションを作成し、以下のファイルを作成しコードを記述します。
@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>
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");
}
}
}
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 を利用します。
@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>
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