背景
ASP.NET のチュートリアルを載せたWebサイトやChatGPTにASP.NETのチュートリアルの構成を聞いたとき、Routingは必ず入ってきました。
そんなに大事な概念のはずなのに、よくわかっていない。
ということで、今回はRoutingについてまとめてみました。
Routingを学ぶには、ある程度HTTPやMVCパターンについて把握している必要があります。最後に補足として追加したので、必要な方は読んでみてください。
ASP.NET Core Routing
HTTP通信の模式図
Routingはクライアント(ユーザー, Webブラウザ) から送られてきたリクエストを、Controllerへと導く役割を担います。
ASP.NETでRoutingを設定する方法は2つあります。
1つ目は、MapControllerRoute メソッドを使う方法です。
Visual Studioで、MVCパターンのテンプレートを選択してWebアプリを作成すると、自動でProgram.csというファイルが作成されます。Programa.csは、Webアプリを立ち上げる際に必要な処理を書いているファイルで、MapControllerRouteメソッドはそこで使用されており、URLとController 及び そのメソッドとの紐づけを行います。
// Program.cs
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"); // URLの構造を示す
上のコードは、実際にMVCパターンのテンプレートを選択してWebアプリを作成したものになります。
nameは公式にも、”routeの名前” としか書いてないため、よくわかりません。一方、patternはURLの構成を示しており、上記ではControllerの名前/メソッドの名前/id を示していることがわかります。また、controllerとactionには、それぞれ初期値が設定されている(Home, Index) ことがわかります。
また、MapControllerRouteには、constraintsやdataTokensといったパラメータがあります。現時点では使ったことがないため解説しませんが、
- constraints → Routeに対して制約を与える(例, idはintのみok)
(参照 : https://www.tektutorialshub.com/asp-net-core/asp-net-core-route-constraints/) - dataTokens → 任意のパラメータを与える
(参照 : https://andrewlock.net/using-routing-datatokens-in-asp-net-core/)
みたいです。
2つ目は、Route属性(Attribute) を用いる方法です。
属性とは、クラスやメソッド、プロパティに付与する特徴のようなものです。
# Player.cs
public class PlayerEntity
{
[Key]
public int Number { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
例えば、上記のようなModelクラスをもとにEntityFrameworkを用いてテーブルを作成すると、Numberの列を主キーとすることができます。これは、[Key]属性をNumberプロパティに付与しているためです。
Routingをするためには、[Route] 属性をコントローラーやメソッドに付与します。
# [Route]を使ったRoutingの例
public class MyDemoController : Controller
{
[Route("")]
[Route("Home")]
[Route("Home/Index")]
[Route("Home/Index/{id?}")]
public IActionResult MyIndex(int? id)
{
return ControllerContext.MyDisplayRouteInfo(id);
}
}
上記のコードは、MicrosoftのRoutingを紹介したページから一部コピーしたものです。[Route]に渡している文字列は、MyIndexメソッドのパスを示しております。実は、この記事を書くまではこの方法を知らず、学んだ今も「別に1つ目の方法で事足りるのでは?」なんてこっそり思っています。
まとめ
- Routingはクライアントから送られてきたリクエストを、Controllerへと導く役割を担います。
- 一般的には、Program.csでRoutingを明示します。
補足
HTTP request and HTTP response
HyperText Transfer Protocol (HTTP) は「Webに基づいて通信を行うための規約」です。
Webアプリケーションを使用する時にも、この規約は守られています。クライアント (僕達) がアプリに対し、「このページに遷移したい」、「この画像を見たい」と頼むことをHTTP requestと呼び、これに対してアプリが適切なページやページに含まれる画像を渡すことをHTTP responseと呼びます。
HTTPに基づいた通信の模式図
Model-View-Controller (MVC)パターン
MVCパターンは、ソフトウェアのデザインパターンの1つです。
ソフトウェア (今回はWebアプリ) をModel, View, Controllerの3要素に分けることにより、開発効率の向上・バグ発見の容易化・保守性の向上に繋がります。
- Model
-
コントローラー – データベース間のデータの受け渡しを担当
ただデータを受け渡すだけでなく、データの演算 (例、データAとデータBの値を足す) も担当する。 - View
-
ユーザーインターフェース (UI) を担当する。
- Controller
-
ユーザーからのリクエストの受け取り ~ レスポンスの生成・送信までの流れの処理を担当する。
リクエストを受け、目的の画面を用意し、必要な場合はデータを用意するようModelに指示し、画面に添えてレスポンスとして返す。
Routingは、ユーザーからコントローラーへとリクエストを渡す際、URLをパスへと変換する際に用います。
- geegsforgeeks, “MVC Framework Introduction”, https://www.geeksforgeeks.org/mvc-framework-introduction/
コメント