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ルーティングを利用するための準備は整ったのではないかと思います。
現実にどのようなルーティングをアプリケーションで使っていくのがよいか、これからいろいろ考えてみます。

公開 19-09-2008 05:30 投稿者 ono
カテゴリ:

コメント

 

とりこびと said:

なるほど。やっぱりUrlRoutingModuleがキモなんですね。

MSDNのリンク先でも仕組みの部分が見当たらず、名称が出てくるのに中身の説明のないUrlRoutingModuleは気になっていましたw

ASP.NET MVC のURLルーティングよりこちらのほうがめんどくさいけれど、その分理解はしやすい…でしょうかね。
9月 20, 2008 8:54
 

ono said:

> ASP.NET MVC のURLルーティングよりこちらのほうがめんどくさいけれど

中身は一緒です。
MVCのほうはRouteを作成するとき、必ずMVCRouteHandlerを渡すことになるのですが、その記述が面倒(というか常に同じこと書く)だから拡張メソッドでちょこっと隠蔽してるだけです。
9月 22, 2008 9:55
 

ナオキにASP.NET(仮) said:

どっとねっとふぁんBlog からです。 ASP.NET ルーティングの仕組み 先日の投稿から間を空けずに、URL ルーティングの仕組みに関する投稿です。凄い! ASP.NET の仕組み ASP.NET
9月 22, 2008 11:12
この投稿に対する新規コメントはできません
SkinName:iroha_Blog2
Powered by Community Server, by Telligent Systems