ASP.NET Core(C#)のルーティングとは?仕組みと基本的な使い方を徹底解説
ルーティングとは、受信したHTTPリクエストを適切なルートハンドラーにマッピングするための仕組みです。
ルートはアプリケーションの起動時に設定され、URLからリクエスト処理に必要な値を抽出することもできます。本記事では、ASP.NET Coreにおけるルーティングの基本概念から、URLマッチング、URL生成、そして実際のルート定義方法までをわかりやすく解説します。
ルーティングの基本
ルーティングは「ルート」(IRouterインターフェイスの実装)を使用し、主に以下の2つの役割を担います。
- 受信したリクエストを対応するルートハンドラーへマッピングする
- レスポンスで使用するURLを生成する
ルーティングは、RouterMiddlewareクラスによってミドルウェアパイプラインに接続されます。ASP.NET Core MVCでは、アプリケーション構成の一環として、自動的にこのミドルウェアパイプラインへルーティングが追加されます。
URLマッチングの仕組み
受信したリクエストはまずRouterMiddlewareに到達し、登録されている各ルートに対して順番にRouteAsyncメソッドが呼び出されます。
各IRouterインスタンスは、RouteContextのHandlerプロパティにnull以外のRequestDelegateを設定することで、そのリクエストを処理するかどうかを判断します。
いずれかのルートがハンドラーを設定した場合、そのハンドラーが呼び出されてリクエストが処理され、以降のルートは評価されません。
一方、すべてのルートが実行されてもリクエストに対応するハンドラーが見つからなかった場合は、ミドルウェアがnextを呼び出し、リクエストパイプライン内の次のミドルウェアへ処理が委譲されます。
URL生成の仕組み
URL生成も同様の反復処理で行われますが、開始点が異なります。ユーザーコードまたはフレームワークのコードが、ルートコレクションのGetVirtualPathメソッドを呼び出すところから処理が始まります。
その後、各ルートのGetVirtualPathメソッドが順番に呼び出され、null以外のVirtualPathDataが返された時点でURL生成が完了します。
ルートの作成方法
ルーティングでは、IRouterインターフェイスの標準実装としてRouteクラスが提供されています。Routeクラスはルートテンプレート構文を使用してパターンを定義し、RouteAsyncが呼び出された際に、そのパターンをURLパスと照合します。
また、GetVirtualPathが呼び出された際には、同じルートテンプレートを使ってURLを生成します。つまり、1つのテンプレートでマッチングと生成の両方を担うのが特徴です。
ルート定義の例
routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");この例では、「{controller=Home}/{action=Index}/{id?}」というルートテンプレートを定義しています。controllerとactionにはデフォルト値(Home/Index)が設定されており、idは省略可能な任意パラメータです。これにより、たとえば「/Product/Detail/5」のようなURLを直感的にコントローラーのアクションへ振り分けられます。
ルート作成用の拡張メソッド
フレームワークは、ルートを簡単に作成できるよう、便利な拡張メソッドを多数提供しています。主なものは以下の通りです。
MapRoute MapGet MapPost MapPut MapVerb
特にMapGetやMapPostなどHTTPメソッドに対応した拡張メソッドを活用すれば、RESTfulなAPIエンドポイントを簡潔かつ明瞭に定義できます。用途に応じてこれらのメソッドを使い分けることで、保守性の高いルーティング設計が可能になります。
-
ASP.NET MVC C#におけるNonAction属性(NonActionAttribute)の重要性とは?
NonAction 属性は、コントローラー内にパブリックメソッドを定義したいものの、それをアクションメソッドとして扱いたくない場合に使用します。アクションメソッドとは、URLを使って呼び出すことができるコントローラー内のパブリックメソッドのことです。そのため、デフォルトではコントローラー内に定義されたすべてのパブリックメソッドは、URLリクエスト経由で呼び出し可能な状態になっています。コントローラー内のパブリックメソッドへのアクセスを制限したい場合は、NonAction属性を利用することで実現できます。ここで、MyMethod1 と MyMethod2 という2つのパブリックメソッドを持つ H
-
ASP.NET Web API(C#)の組み込みメッセージハンドラーとは?仕組みと種類を解説
メッセージハンドラー(Message Handler)とは、HTTPリクエストを受け取り、HTTPレスポンスを返す役割を持つクラスのことです。すべてのメッセージハンドラーは、抽象クラス HttpMessageHandler から派生します。このハンドラーを利用することで、リクエストが HttpControllerDispatcher に到達する前に、その内容を処理・編集、あるいは拒否することができます。メッセージハンドラーは、リクエスト処理パイプラインのごく早い段階で実行されるため、Web APIにおける横断的関心事(クロスカッティングコンサーン)を実装するのに最適な場所です。メッセージハンド