ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用)

ASP.NET アプリケーションでリダイレクトするコードを紹介します。

概要

こちらの記事では、WebFormにアクセス時にリダイレクトするコードを紹介しました。
ページと対応するリダイレクトの場合や、リダイレクトの設定数が少ない場合は紹介した方式の実装で問題ありませんが、 リダイレクトの設定が多い場合、リダイレクトごとにWebFormを作成する必要があり、実装に手間がかかります。

この記事では、グローバルアプリケーションクラスを利用してリダイレクトを実装するコードを紹介します。

実装例

ASP.NET WebFormプロジェクトを作成します。

グローバルアプリケーションクラスの追加

ASP.NET WebFormプロジェクトを作成した直後の状態です。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像1

[ソリューションエクスプローラー]でプロジェクトのノードをクリックして選択します。右クリックしてポップアップメニューを表示します。 メニューの[追加]サブメニューの[新しい項目]をクリックします。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像2

下図の[新しい項目の追加]ダイアログが表示されます。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像3

中央のリストから[グローバル アプリケーション クラス]の項目をクリックして選択します。[名前]はデフォルトの"Global.asax"とします。 ダイアログ右下の[追加]ボタンをクリックします。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像4

プロジェクトに"Global.asax"ファイルが追加されました。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像5
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像6

コード

Global.asaxにコードを記述します。以下のコードを作成します。
Application_BeginRequest メソッドにコードを追加します。

Global.asax
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エラーが表示されます。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像7

アドレスバーに(アプリケーションルートURL)/my-redirectのURLを入力します。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像8

URLを開くとリダイレクト処理が実行され、リダイレクト先のページが表示されます。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像9

レスポンスを確認します。リダイレクト元のURLで302のステータスコードが戻り、リダイレクトが実行されていることが確認できます。
ASP.NET アプリケーションでリダイレクトする (グローバルアプリケーションクラスの利用):画像10


AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2024-01-28
Copyright © 1995–2025 iPentec all rights reserverd.