ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用) - ASP.NET
ASP.NET アプリケーションでリダイレクトするコードを紹介します。
概要
こちらの記事では、WebFormにアクセス時にリダイレクトするコードを紹介しました。
ページと対応するリダイレクトの場合や、リダイレクトの設定数が少ない場合は紹介した方式の実装で問題ありませんが、
リダイレクトの設定が多い場合、リダイレクトごとにWebFormを作成する必要があり、実装に手間がかかります。
この記事では、グローバルアプリケーションクラスを利用してリダイレクトを実装するコードを紹介します。
実装例
ASP.NET WebFormプロジェクトを作成します。
グローバルアプリケーションクラスの追加
ASP.NET WebFormプロジェクトを作成した直後の状態です。
[ソリューションエクスプローラー]でプロジェクトのノードをクリックして選択します。右クリックしてポップアップメニューを表示します。
メニューの[追加]サブメニューの[新しい項目]をクリックします。
下図の[新しい項目の追加]ダイアログが表示されます。
中央のリストから[グローバル アプリケーション クラス]の項目をクリックして選択します。[名前]はデフォルトの"Global.asax"とします。
ダイアログ右下の[追加]ボタンをクリックします。
プロジェクトに"Global.asax"ファイルが追加されました。
コード
Global.asaxにコードを記述します。以下のコードを作成します。
Application_BeginRequest メソッドにコードを追加します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
namespace RedirectGlobalDemo
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
}
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.FilePath == "/my-redirect") {
Response.Redirect("https://www.ipentec.com");
}
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
}
protected void Application_Error(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
protected void Application_End(object sender, EventArgs e)
{
}
}
}
解説
ASP.NETアプリケーションにリクエストが発生すると、グローバルアプリケーションクラスの
Application_BeginRequest()
メソッドが呼び出されます。
Request オブジェクトのFilePathプロパティの値を取得しリクエストされたパスを判定してリダイレクトの処理をします。
下記のコードでは、
/my-redirect
のパスの場合にリダイレクトする処理となります。
if (Request.FilePath == "/my-redirect") {
Response.Redirect("https://www.ipentec.com");
}
実行結果
プロジェクトを実行します。デフォルトで表示するWebFormがないため、下図のForbiddenエラーが表示されます。
アドレスバーに
(アプリケーションルートURL)/my-redirect
のURLを入力します。
URLを開くとリダイレクト処理が実行され、リダイレクト先のページが表示されます。
レスポンスを確認します。リダイレクト元のURLで302のステータスコードが戻り、リダイレクトが実行されていることが確認できます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用