MENU

ASP.NET Core MVCにおけるRoutingの基礎

https://pixabay.com/ja/users/mohamed_hassan-5229782/ が作成した画像をダウンロード
目次

背景

ASP.NET のチュートリアルを載せたWebサイトやChatGPTにASP.NETのチュートリアルの構成を聞いたとき、Routingは必ず入ってきました。

そんなに大事な概念のはずなのに、よくわかっていない。
ということで、今回はRoutingについてまとめてみました。

Routingを学ぶには、ある程度HTTPやMVCパターンについて把握している必要があります。最後に補足として追加したので、必要な方は読んでみてください。

ASP.NET Core Routing

HTTP通信の模式図

Dot Net Tricks, “ASP.NET Core Routing,”, https://www.dotnettricks.com/learn/aspnetcore/routing

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といったパラメータがあります。現時点では使ったことがないため解説しませんが、

みたいです。

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に基づいた通信の模式図

HTTP: An overview of web development, https://medium.com/swlh/http-an-overview-of-web-development-4f6033efb9da

Model-View-Controller (MVC)パターン

MVCパターンは、ソフトウェアのデザインパターンの1つです。

ソフトウェア (今回はWebアプリ) をModel, View, Controllerの3要素に分けることにより、開発効率の向上・バグ発見の容易化・保守性の向上に繋がります。

Model

コントローラー – データベース間のデータの受け渡しを担当
ただデータを受け渡すだけでなく、データの演算 (例、データAとデータBの値を足す) も担当する。

View

ユーザーインターフェース (UI) を担当する。

Controller

ユーザーからのリクエストの受け取り ~ レスポンスの生成・送信までの流れの処理を担当する。
リクエストを受け、目的の画面を用意し、必要な場合はデータを用意するようModelに指示し、画面に添えてレスポンスとして返す。

Routingは、ユーザーからコントローラーへとリクエストを渡す際、URLをパスへと変換する際に用います。

参考文献
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次