RazorPagesで指定したページ名のページにリダイレクトするコードを紹介します。
こちらの記事ではRazorPagesで指定したURLにリダイレクトするコードを紹介しました。
URLを指定したリダイレクトは遷移先がわかりやすいメリットがありますが、アプリケーションを配置するドメインやディレクトリが違う場合に、
URLを変更する必要があることや、ルーティングの設定が変化した場合、設定の変更に合わせてURLも変更する必要があり、管理がしにくいデメリットもあります。
ページ名を指定してリダイレクトをする方法では、ルーティングの設定が変化した場合や、配置ディレクトリが変化した場合でも、リダイレクトの設定を変更せずに対応できます。
この記事では、RedirectToPageメソッドを利用した、ページ名を指定したリダイレクトのコードを紹介します。
RedirectToPage([RazorPage名]);
RedirectToPagePermanent([RazorPage名]);
public IActionResult OnPost()
{
return RedirectToPage("/dest-plain");
}
public IActionResult OnPost()
{
return new RedirectToPageResult("/dest-plain");
}
301リダイレクトする場合は、 RedirectToPageメソッドを利用している場合は、 RedirectToPagePermanent メソッドに変更します。 RedirectToPageResultオブジェクトを作成する方式の場合は、RedirectToPageResultオブジェクトのコンストラクタの第四引数にtrueを指定します。
public IActionResult OnPost()
{
return RedirectToPagePermanent("/dest-plain");
}
public IActionResult OnPost()
{
return new RedirectToPageResult("/dest-plain",null,null, true);
}
@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>
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 ページを作成します。
@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になります。
@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>
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 ページを作成します。
@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
にアクセスします。
下図のページが表示されます。
[リダイレクト]ボタンをクリックします。リダイレクト処理でページ遷移します。