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 によるリクエスト処理の流れを、図解イメージとして文章で整理します。
- ブラウザからURLリクエストが送信される
- 例:
/products/details/10
- 例:
- ASP.NET が RouteTable.Routes を参照
- 登録されているルート定義を、上から順に評価
- RouteCollection 内の Route とURLを照合
products/details/{id}が一致
- RouteData が生成される
{ id = "10" }のようにパラメータが格納される
- IRouteHandler が処理先を決定
- Web Forms の場合:対象の .aspx ページ
- MVC の場合:Controller / Action
- 最終的な処理が実行され、レスポンスが返却される
この流れを理解しておくことで、
- なぜその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 の思想を理解することが不可欠
両者を理解することで、移行・改修時の判断力が大きく向上します。本記事がその一助となれば幸いです。

コメント