ASP.NET CoreMVCでリクエストをリダイレクトする方法

ASP.NET Coreは、高性能Webアプリケーションを構築するための、クロスプラットフォーム、オープンソース、無駄のない、高速なモジュラーフレームワークです。ASP.NET Core MVCアプリケーションを使用すると、いくつかの異なる方法で要求を指定されたURLにリダイレクトできます。この記事では、必要に応じてコード例を使用してこれを実現する方法について説明します。

この記事で提供されているコード例を使用するには、システムにVisual Studio2019がインストールされている必要があります。まだコピーをお持ちでない場合は、こちらからVisual Studio2019をダウンロードできます。 

[また、C#で神オブジェクトをリファクタリングする方法]

VisualStudioでASP.NETCoreMVCプロジェクトを作成します

まず、Visual Studio2019でASP.NETCoreプロジェクトを作成しましょう。VisualStudio2019がシステムにインストールされていると仮定して、以下に概説する手順に従って、VisualStudioで新しいASP.NETCoreプロジェクトを作成します。

  1. Visual StudioIDEを起動します。
  2. 「新しいプロジェクトの作成」をクリックします。
  3. [新しいプロジェクトの作成]ウィンドウで、表示されたテンプレートのリストから[ASP.NET CoreWebアプリケーション]を選択します。
  4. [次へ]をクリックします。
  5. 「新しいプロジェクトの構成」ウィンドウで、新しいプロジェクトの名前と場所を指定します。
  6. 必要に応じて、[ソリューションとプロジェクトを同じディレクトリに配置する]チェックボックスをオンにします。
  7. [作成]をクリックします。
  8. 次に示す[新しいASP.NETCore Webアプリケーションの作成]ウィンドウで、ランタイムとして.NET Coreを選択し、上部のドロップダウンリストからASP.NET Core 3.1(またはそれ以降)を選択します。
  9. プロジェクトテンプレートとして「Webアプリケーション(Model-View-Controller)」を選択して、新しいASP.NET CoreMVCアプリケーションを作成します。 
  10. ここではこれらの機能を使用しないため、[Dockerサポートを有効にする]チェックボックスと[HTTPS用に構成する]チェックボックスがオフになっていることを確認してください。
  11. 認証も使用しないため、[認証]が[認証なし]に設定されていることを確認してください。
  12. [作成]をクリックします。

これらの手順に従うと、Visual Studio2019で新しいASP.NETCore MVCプロジェクトが作成されます。以下のセクションでこのプロジェクトを使用して、ASP.NET Core3.1でアクションメソッドを操作するときに要求をリダイレクトする方法を説明します。

アクションをリダイレクトすると、ASP.NET CoreMVCが生成されます

ASP.NET Core MVCには、RedirectResult、RedirectToActionResult、RedirectToRouteResult、LocalRedirectResultなど、いくつかの種類のアクション結果があります。これらのクラスはすべて、ActionResultクラスとIActionResultおよびIKeepTempDataResultインターフェイスを拡張し、Found(Httpステータスコード302)、Moved Permanently(Httpステータスコード301)、Temporary Redirect(Httpステータスコード307)、またはPermanent Redirect(Httpステータスコード308)を返します。 )。

このセクションでは、これらのそれぞれをどのように処理できるかを検討します。

ASP.NET CoreMVCでRedirectResultを使用する

次のいずれかのメソッドを使用して、RedirectResultを返すことができます。

  • リダイレクト– Httpステータスコード302が見つかりました(ロケーションヘッダーで指定されたURLに一時的に移動されました)
  • RedirectPermanent –Httpステータスコード301が永続的に移動しました
  • RedirectPermanentPreserveMethod –Httpステータスコード308永続的なリダイレクト
  • RedirectPreserveMethod –Httpステータスコード307一時的なリダイレクト

次のコード行は、これらの各メソッドの使用方法を示しています。

Redirect( "/ Author / Index");
RedirectPermanent( "/ Author / Index");
RedirectPermanentPreserveMethod( "/ Author / Index");
RedirectPreserveMethod( "/ Author / Index");

または、以下のコードスニペットに示すように、RedirectResultのインスタンスを返すこともできます。

public RedirectResult Index()

{{

   新しいRedirectResult(url: "/ Author / Index"、permanent:true、

                             prepareMethod:true);

}

Redirectメソッドを使用して、リクエストを指定されたURLにリダイレクトできることに注意してください。このメソッドは、ControllerBaseと呼ばれる抽象基本クラスで使用できます。

public RedirectResult Index()

{{

  Redirect( "// google.com");を返します。

}

ASP.NET Core MVCで作成するコントローラーは、Controllerクラスを拡張することに注意してください。このクラスは、ControllerBaseクラスを拡張し、IActionFilter、IFilterMetadata、IAsyncActionFilter、およびIDisposableインターフェイスを実装します。

ASP.NET CoreMVCでRedirectToActionResultを使用する

このアクション結果は、指定されたアクションとコントローラーにリダイレクトするために使用できます。コントローラが指定されていない場合は、現在のコントローラ内の指定されたアクションにリダイレクトされます。次のメソッドのいずれかを使用して、指定したアクションにリダイレクトし、アクションメソッドからRedirectToActionResultのインスタンスを返すことができます。

  • RedirectToAction – Httpステータスコード302が見つかりました(ロケーションヘッダーで指定されたURLに一時的に移動されました)
  • RedirectToActionPermanent –Httpステータスコード301が永続的に移動されました
  • RedirectToActionPermanentPreserveMethod –Httpステータスコード308永続的なリダイレクト
  • RedirectToActionPreserveMethod –Httpステータスコード307一時的なリダイレクト

次のコードスニペットは、RedirectToActionメソッドの使用方法を示しています。

public RedirectToActionResult Index()

{{

    RedirectToAction(actionName: "Index"、controllerName: "Author");を返します。

}

リクエストを現在のコントローラーのアクションメソッドにリダイレクトする場合は、コントローラー名をスキップできます。次のコードスニペットは、これを実現する方法を示しています。

public RedirectToActionResult Index()

{{

   RedirectToAction(actionName: "Privacy");を返します。

}

ASP.NET CoreMVCでRedirectToRouteResultを使用する

これは、リクエストを指定されたルートにリダイレクトするために使用できるさらに別のアクション結果です。次のメソッドのいずれかを使用して、アクションメソッドからRedirectToRouteResultのインスタンスを返すことができます。

  • RedirectToRoute – Httpステータスコード302が見つかりました(ロケーションヘッダーで指定されたURLに一時的に移動されました)
  • RedirectToRoutePermanent –Httpステータスコード301が永続的に移動されました
  • RedirectToRoutePermanentPreserveMethod –Httpステータスコード308永続的なリダイレクト
  • RedirectToRoutePreserveMethod –Httpステータスコード307一時的なリダイレクト

次のコードスニペットは、RedirectToRouteメソッドの使用方法を示しています。

public RedirectToRouteResult Index()

{{

    RedirectToRoute( "author");を返します。

}

以下のコードスニペットに示すように、リダイレクト時にルート値を指定することもできます。

var routeValue = new RouteValueDictionary

 (new {action = "View"、controller = "Author"});

RedirectToRoute(routeValue);を返します。

ASP.NET CoreMVCでLocalRedirectResultを使用する

このアクション結果は、ローカルURLにリダイレクトする場合に使用されます。外部URLを使用すると、InvalidOperationExceptionがスローされます。次のメソッドのいずれかを使用して、アクションメソッドからLocalRedirectResultのインスタンスを返すことができます。

  • LocalRedirect – Httpステータスコード302が見つかりました(ロケーションヘッダーで指定されたURLに一時的に移動されました)
  • LocalRedirectPermanent –Httpステータスコード301が永続的に移動されました
  • LocalRedirectPermanentPreserveMethod –Httpステータスコード308永続的なリダイレクト
  • LocalRedirectPreserveMethod –Httpステータスコード307一時的なリダイレクト

ASP.NET CoreMVCのかみそりのページにリダイレクトする

最後に、RedirectToPageメソッドを使用して、リクエストのリダイレクト先のターゲットレイザーページを指定して、レイザーページにリダイレクトすることもできることに注意してください。RedirectToPageメソッドは、HTTPステータスコード302とともにRedirectToPageResultインスタンスを返します。

リクエストをリダイレクトするAuthorという名前のページがある場合は、次のコードスニペットを使用できます。

public IActionResult RedirectToAuthorPage()

{{

    RedirectToPage( "Author");を返します。

}

ASP.NET Coreでさらに多くのことを行う方法:

  • ASP.NETCoreで属性ルーティングを使用する方法
  • ASP.NET CoreMVCのアクションメソッドにパラメーターを渡す方法
  • ASP.NETCoreでAPIアナライザーを使用する方法
  • ASP.NETCoreでルートデータトークンを使用する方法
  • ASP.NETCoreでAPIバージョン管理を使用する方法
  • ASP.NET Core3.1でデータ転送オブジェクトを使用する方法
  • ASP.NET CoreMVCで404エラーを処理する方法
  • ASP.NET Core3.1のアクションフィルターで依存性注入を使用する方法
  • ASP.NETCoreでオプションパターンを使用する方法
  • ASP.NET Core 3.0MVCでエンドポイントルーティングを使用する方法
  • ASP.NET Core3.0でExcelにデータをエクスポートする方法
  • ASP.NET Core3.0でLoggerMessageを使用する方法
  • ASP.NETCoreで電子メールを送信する方法
  • ASP.NETCoreでSQLServerにデータを記録する方法
  • ASP.NETCoreでQuartz.NETを使用してジョブをスケジュールする方法
  • ASP.NET Core WebAPIからデータを返す方法
  • ASP.NETCoreで応答データをフォーマットする方法
  • RestSharpを使用してASP.NETCore WebAPIを使用する方法
  • Dapperを使用して非同期操作を実行する方法
  • ASP.NETCoreで機能フラグを使用する方法
  • ASP.NETCoreでFromServices属性を使用する方法
  • ASP.NETCoreでCookieを操作する方法
  • ASP.NETCoreで静的ファイルを操作する方法
  • ASP.NETCoreでURL書き換えミドルウェアを使用する方法
  • ASP.NETCoreでレート制限を実装する方法
  • ASP.NETCoreでAzureApplicationInsightsを使用する方法
  • ASP.NETCoreで高度なNLog機能を使用する
  • ASP.NET WebAPIでエラーを処理する方法
  • ASP.NET CoreMVCでグローバル例外処理を実装する方法
  • ASP.NET CoreMVCでnull値を処理する方法
  • ASP.NET Core WebAPIの高度なバージョン管理
  • ASP.NETCoreでワーカーサービスを操作する方法
  • ASP.NETCoreでDataProtectionAPIを使用する方法
  • ASP.NETCoreで条件付きミドルウェアを使用する方法
  • ASP.NETCoreでセッション状態を操作する方法
  • ASP.NETCoreで効率的なコントローラーを作成する方法