ルーティングの設定の基本（ASP.NET）

# やりたいこと
ルーティングを設定し、ホスト名へアクセスした際のページを設定したい。

# 初期設定では、デフォルトのページが表示されます。
デフォルトでは、ASP.NETのデフォルトページが設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/056e75cc-ef82-d7ff-c9c9-6a4c5368aa38.png)

デフォルトのページは、ユーザーにとっては意味のないページになります。試しに、itemページ（商品一覧ページ）を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/5906efad-54cd-9286-2395-b7300e2ac2c3.png)


# 変更するファイルとソースコード
App_Start>RouteConfig.vbのファイルを編集すれば、設定することが可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/0f5e117b-ca9c-7422-20f5-9b57e5419beb.png)
**ソースコード**
```VB
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.Mvc
Imports System.Web.Routing

Public Module RouteConfig
    Public Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        routes.MapRoute(
            name:="Default",
            url:="{controller}/{action}/{id}",
            defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}
        )
    End Sub
End Module
```

# 変更後（index）
routes.MapRouteにあるdefaultsの設定（コントローラーとアクション）を変えることで対応することができます。以下のコードでは、以下のように設定しています。
- .controller ⇒ item　
- .action ⇒ Index

**ソースコード**
```VB
        routes.MapRoute(
            name:="Default",
            url:="{controller}/{action}/{id}",
            defaults:=New With {.controller = "item", .action = "Index", .id = UrlParameter.Optional}
        )
```

設定後に、ホスト名にアクセスすると、商品一覧ページをトップに表示することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/b6aebe60-a236-f760-cf5a-41bde90a7a2a.png)


# 変更後（create）
商品登録ページを表示したい場合は、以下のように設定します。
- .controller ⇒ item　
- .action ⇒ create

**ソースコード**
```VB
        routes.MapRoute(
            name:="Default",
            url:="{controller}/{action}/{id}",
            defaults:=New With {.controller = "item", .action = "create", .id = UrlParameter.Optional}
        )
```
設定後に、ホスト名にアクセスすると、商品登録ページをトップに表示することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/67419bba-3514-9d34-be7e-6061daca7f70.png)

# 変更後（details）
商品の詳細を表示したい場合、同じように設定してしまった場合、エラーとなってしまいます。原因は、idを設定していないため、どの商品に対してのルーティングなのかが分からないためです。
```VB
        routes.MapRoute(
            name:="Default",
            url:="{controller}/{action}/{id}",
            defaults:=New With {.controller = "item", .action = "Details", .id = UrlParameter.Optional}
        )
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/d884af6a-7fb5-43b3-920e-f895f12eb3d0.png)

そのため、商品が判別できるように、idを設定することで、表示されます。
**ソースコード**
```VB
 routes.MapRoute(
            name:="Default",
            url:="{controller}/{action}/{id}",
            defaults:=New With {.controller = "item", .action = "details", .id = 2},
            constraints:=New With {.id = "\d+"}
        )
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/15298f2a-47e4-5027-dd93-ca72f1d645e8.png)
ここでconstraintsを追記しています。このconstraintsを指定しなければ、悪意あるユーザーがブラウザ上からconstraintsで定義されていない値を送信できるようになってしまうためにあります。

# 注意事項
- この記事では、visual studio 2022を使用しているので、試してみたい方は事前に準備が必要です。
- 関連する記事の一覧は[こちら](https://qiita.com/portfoliokns3/items/7c789b7e1ba40500abbb#%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E6%89%B1%E3%81%A3%E3%81%A6%E3%81%84%E3%81%8D%E3%81%9F%E3%81%84%E4%BA%BA%E5%90%91%E3%81%91%E3%81%AE%E8%A8%98%E4%BA%8B-1)。
※参照先のリンクが切れている場合は、[トップページ](https://qiita.com/portfoliokns3)から確認してください。

# この記事は誰向けの記事か？
- 試しにASP.NETを始めてみたいと思っている人

# 環境
- OS：Windows10
- [visual studio 2022](https://visualstudio.microsoft.com/ja/vs/)
- [Visual Studio Community Edition](https://visualstudio.microsoft.com/ja/downloads/)

# 本記事における注意事項
- 本記事は、備忘録としてまとめたものになります。
- 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
- また記載内容はすべて、正しい内容が記載されているとは限りません。
- 誤った内容を見つけた場合は、ご指摘をお願いいたします。