ASP.NETのURLルーティングを理解する:System.Web.Routingの基本

システム開発
スポンサーリンク
スポンサーリンク

ASP.NETアプリケーションにおいて、URL設計はユーザー体験(UX)やSEOに直結する重要な要素です。その中核を担う仕組みが「ルーティング」です。

本記事では、.NET Framework 環境で利用される System.Web.Routing に焦点を当て、基本的な仕組みから主要クラスの役割、設定例、ASP.NET Core との違いまでを体系的に解説します。

本記事は特に、以下のような方を主な対象としています。

  • ASP.NET MVC や ASP.NET Core の経験はあるが、Web Forms のルーティングは断片的にしか知らない
  • レガシーな ASP.NET(.NET Framework)アプリの保守・改修を担当している
  • 将来的な MVC 化・Core 移行を見据えて URL 設計を整理したい

初級〜中級者の方でも理解できるよう、実務視点を交えて解説していきます。

System.Web.Routingとは?

ASP.NET Webアプリケーションでは、受信したリクエストURLを、適切な処理(ページやコントローラ)へ振り分ける必要があります。この役割を担うのが「ルーティング機構」です。

System.Web.Routing は、.NET Framework に標準で組み込まれているルーティング用の名前空間で、主に ASP.NET Web Forms および ASP.NET MVC 5 以前 のアプリケーションで利用されます。

これを使用することで、従来の次のようなクエリベースのURLを、

/ProductDetails.aspx?id=10

より人間にとって読みやすい、意味のあるURLに変換できます。

/products/details/10

このURLは内部的には、ProductDetails.aspx に対して id=10 を渡すリクエストとして処理されます。

この仕組みにより、以下のような効果が得られます。

  • URLの可読性向上
  • SEOへの好影響
  • URL構造と内部実装の分離
  • 画面構成変更時の影響範囲の最小化

特に、既存の Web Forms アプリを大きく作り替えずに URL だけ整理したいケースでは、System.Web.Routing は今なお有効な選択肢です。

主なクラスと役割

System.Web.Routing では、複数のクラスが連携してルーティングを実現しています。ここでは、実務で押さえておきたい主要クラスを紹介します。

RouteTable

ルート定義のエントリポイント

RouteTable は、アプリケーション全体のルート情報を保持する静的クラスです。通常、アプリケーション起動時に RouteTable.Routes に対してルートを登録します。

RouteCollection

複数ルートの管理と優先順位制御

RouteCollection は、Route オブジェクトを保持するコレクションです。RouteTable.Routes はこの RouteCollection のインスタンスです。

重要なポイントとして、ルートは登録順に評価されます。汎用的なルートを先に定義してしまうと、意図しないURLマッチが発生するため注意が必要です。

Route

単一ルートの定義情報

Route は、URLパターン、デフォルト値、制約条件、ルートハンドラといった情報をまとめたクラスです。URLの構造と処理先を結びつける中核的な存在です。

IRouteHandler / RouteHandler

ルーティング後の処理を決定する仕組み

IRouteHandler は、ルートが一致した際に「どの処理を実行するか」を決定するためのインターフェースです。

なお、Web Forms や MVC を通常構成で利用する場合、開発者がこのインターフェースを直接実装するケースは多くありません。特殊なルーティング制御が必要な場合にのみ利用されます。

RouteData

リクエスト時のルート解析結果

RouteData は、実際のリクエストURLと一致したルート情報や、抽出されたパラメータを保持します。ページやコントローラ内で参照されます。

基本的なルート設定例(Web Forms)

Web Forms では、ルート定義は Global.asax に記述するのが一般的です。

using System.Web;
using System.Web.Routing;

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute(
            "ProductDetails",
            "products/details/{id}",
            "~/ProductDetails.aspx"
        );
    }
}

この設定により、/products/details/10 というURLで ProductDetails.aspx が呼び出され、id=10 がパラメータとして渡されます。

図解:URL → Route → Handler の流れ(テキスト解説)

ここでは、System.Web.Routing によるリクエスト処理の流れを、図解イメージとして文章で整理します。

  1. ブラウザからURLリクエストが送信される
    • 例:/products/details/10
  2. ASP.NET が RouteTable.Routes を参照
    • 登録されているルート定義を、上から順に評価
  3. RouteCollection 内の Route とURLを照合
    • products/details/{id} が一致
  4. RouteData が生成される
    • { id = "10" } のようにパラメータが格納される
  5. IRouteHandler が処理先を決定
    • Web Forms の場合:対象の .aspx ページ
    • MVC の場合:Controller / Action
  6. 最終的な処理が実行され、レスポンスが返却される

この流れを理解しておくことで、

  • なぜそのURLがその画面に到達するのか
  • どこでルート競合が起きているのか

といったトラブルシューティングが格段に容易になります。

ASP.NET Coreとの違い

ASP.NET Core では System.Web.Routing は使用されず、ミドルウェアベースのルーティングが採用されています。

比較項目 ASP.NET(System.Web.Routing) ASP.NET Core
設定場所 Global.asax Program.cs / Startup
設定方法 RouteTable.Routes MapControllerRoute 等
柔軟性 比較的静的 属性ルーティング対応
対象 .NET Framework クロスプラットフォーム

ルーティングのメリットと注意点

メリット

  • SEO効果の向上
  • URLの可読性向上
  • 実装変更に強い設計

注意点

  • ルート定義の増えすぎに注意
  • 登録順によるマッチングを意識
  • Web Forms / MVC 混在時の競合

まとめ

System.Web.Routing は、ASP.NET(.NET Framework)環境において、URL設計を柔軟かつ分かりやすくするための重要な仕組みです。

  • 既存アプリの保守・改善では今なお重要
  • 新規開発では ASP.NET Core の思想を理解することが不可欠

両者を理解することで、移行・改修時の判断力が大きく向上します。本記事がその一助となれば幸いです。

システム開発
スポンサーリンク
シェアする
tobotoboをフォローする

コメント

タイトルとURLをコピーしました