ホーム > .NET, ASP.NET 備忘録 > ASP.NET ルーティングの仕組み

ASP.NET ルーティングの仕組み

ASP.NET ルーティングはどのような仕組みで実現されているのでしょうか。
これを理解するには、まずASP.NETの仕組みを理解しておく必要があります。

ASP.NETの仕組み

上記ページのうち、1から3の部分を特におさえておいてください。
この部分を大雑把にまとめると、

  1. HttpContextがリクエストを受け取ってからレスポンスを返すまで一種のグローバルオブジェクトとして存在している
  2. HttpApplicationが様々なイベントを発生させるタイミングでIHttpModuleが各種処理を実行することができる
  3. 実際に実行されるのはHttpContextのHandlerプロパティに設定されているIHttpHandler(のProcessRequestメソッド)である

ということをまず頭においてください。

ASP.NET ルーティングを利用するにはweb.configにUrlRoutingModuleを登録します。
Moduleは登録されると、すべてのリクエストに対して実行されます。
このUrlRoutingModuleがブラウザからのリクエストを調べて、登録されているルートに合致するかどうかを判断します。

このとき、リクエストされているURLが現在存在しているファイル(aspxなど)を直接指定している場合は、ルートとの合致の調査は行われず(デフォルトの動作)、指定されているファイルがそのまま呼び出されます。
それ以外の場合で登録されているルートがあったら、そのルートに対して設定されているIRouteHandlerのGetHttpHandlerメソッドが呼び出されます。

IRouteHandlerの実装例やその登録の仕方については下記のページを参考にしてください。

ASP.NET ルーティングを実装する

GetHttpHandlerメソッドはIHttpHandlerを返すことが求められています。
で、ここで返されたIHttpHandlerがHttpContextのHandlerプロパティに設定されます。
そして、このHandlerプロパティに設定されているIHttpHandlerのProcessRequestが実行されることになります。

要するにとっても簡単に言うと、UrlRoutingModuleが処理を横取りして、実行されるページ(のインスタンス)を置き換えてしまう、というのがASP.NET ルーティングが行っている動作です。
また、その中でどんなページに置き換えるかを指定するためにIRouteHandlerの実装が必要、ということになります。

ちょっと気をつけないといけないのは、IHttpHandlerのインスタンスのレベルで置き換えが行われている、ということですね。
リクエストの処理の中で内部的にリクエストされたURLを書き換えてしまう(RewritePath)のと異なり、URLの変更は行われないので、ポストバック先はもともとリクエストされたURLになりますし、クエリ文字列としてURLに含まれたデータを取り出すことはできない、ということになります。

さて、ここまででASP.NET ルーティングの仕組みとその実装方法(上記ページ参照)を説明しました。
あと、aspxページ内でルーティングに合わせたURLを生成する方法については、下記を参照していただければよいと思います。

方法:ルートからURLを構築する

これで、実際のASP.NETアプリケーションの中でASP.NETルーティングを利用するための準備は整ったのではないかと思います。
現実にどのようなルーティングをアプリケーションで使っていくのがよいか、これからいろいろ考えてみます。

カテゴリー:.NET, ASP.NET 備忘録
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。