iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Software Development

ASP.NET MVC基礎修練:從菜開始系列 第 14

Day-14 ASP.NET MVC 之 路由2

  • 分享至 

  • xImage
  •  

URL 模式

定義一個路由從URL模式開始,
它指定了與該路由匹配的模式。
位於專案根目錄下的 App_Start\RouteConfig.cs

https://ithelp.ithome.com.tw/upload/images/20230929/201066403Mc35FUVav.jpg

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

在RouteConfig類中,有一個名稱為RegisterRoutes()的方法:

  1. RegisterRoutes()方法是一個靜態方法。
  2. 返回的類型是void。
  3. 它接受一個RouteCollection類型的參數,用於提供ASP.NET路由的路由集合,並將路由信息添加到RouteCollection集合對象中。

在ASP.NET MVC 中,所有的路由都是在RegisterRoutes()方法中定義的。
創建一個ASP.NET MVC 5項目時,將會自動創建一個默認的路由,其名稱為Default。
這個方法的目的是設置應用程序的路由規則,以確保它知道如何處理不同的URL請求,
並將它們對應到適當的控制器和動作方法上。實現所需的功能。

現在先註解掉原本的
改成如下
https://ithelp.ithome.com.tw/upload/images/20230929/20106640ryGlVVLOT7.jpg

這段程式碼說明如下:

1.在 RegisterRoutes() 方法中,我們將路由添加到 RouteCollection 類型的參數 routes 中。
RouteCollection 是一個路由集合,它用於管理應用程序的路由配置。

2.使用 RouteCollection 集合對象的 MapRoute() 方法開始添加路由規則。
這個方法必須提供兩個參數。MapRoute() 方法是一個擴展方法,定義在 RouteCollectionExtensions 靜態類中。
它用於定義路由模式,指定路由的名稱、URL 模式、默認值等信息。

通過在 RegisterRoutes() 方法中配置這些路由,我們可以確保應用程序知道如何解釋不同的 URL 請求,
並將它們映射到正確的控制器和動作方法上,以實現應用程序的預期功能。這樣,我們就可以有效地管理路由,
確保應用程序的各個部分能夠正確地相互通信。

MapRoute()方法必須提供以下兩個參數,其詳細說明如下:

  1. 名稱(Name):這是要對應的路由的名稱,它僅僅是一個用於識別路由的標識符。
  2. URL 模式(URL Pattern):這是路由的 URL 模式,它是用於匹配請求的 URL 的結構。
    URL 模式使用斜槓(/)分隔成不同的段,每個段中都可以包含用花括號括起來的 URL 參數,這些參數充當占位符,
    可以在運行時用實際的值替換。如果一個 URL 段中包含多個 URL 參數,則必須使用文本值分隔符來區分這些參數。

舉例來說,如果我們定義了以下路由:
routes.MapRoute("News", "News/{year}/{month}/{day}");

那麼在生成 URL 時,"News" 部分是固定的,而後面的三個段則是需要進行匹配的。以下是幾個具體的 URL,它們都可以匹配到這個模式:

(1) /News/2023/09/16
(2) /News/2023年/9月/16日
(3) /News/23/9/16

這三個具體的 URL 地址都可以匹配到 "News/{year}/{month}/{day}" 這個模式。在這裡,{year}、{month} 和 {day} 都是位置符號,
也被稱為 URL 參數,它們可以被匹配到。

如果您需要對 {year}、{month} 和 {day} 這三個位置符號進行進一步的約束,以確保它們是正確的年、月和日,那麼可以使用路由約束的概念。後面我們會討論路由約束。
簡單來說,URL 模式就像是一個 URL 地址的模板,我們可以將具體的值填入位置符號中。

URL 路由值

概述
URL 路由值是指 URL 地址中的具體值,我們使用這些實際的值來與 URL 模式中的 URL 參數進行匹配。舉例來說,
對於URL地址/News/Add,"News" 和 "Add" 就是路由值,而 "{Controller}" 則是URL參數,路由值需要與URL參數進行匹配。
我們剛剛自定義了一個包含3個URL段的URL模式,但是如果我們嘗試使用這個URL模式來匹配具體的URL時,可能會出現404錯誤。儘管我們可以按照自己的想法命名URL模式,但對於ASP.NET MVC 應用程序來說,仍然需要一些特定的參數,否則應用程序無法運行。我們需要使用特定的參數來將MVC路由規則與特定的參數值相對應起來。
在ASP.NET MVC 中,C(控制器)負責處理用戶的請求。因此,我們可以從控制器著手處理URL。
在控制器中,我們有不同的方法,這些方法可以返回字符串或視圖。因此,使用控制器和方法來構建URL是最合適不過的。
在URL模式中,我們可以使用"{controller}"表示控制器,"{action}"表示方法。

ASP.NET MVC 的 URL 模式:

{controller}/{action}/{id}

控制器和方法的匹配
使用預設的路由配置中的URL模式,來進行控制器和方法的匹配:

https://ithelp.ithome.com.tw/upload/images/20230929/20106640NX1QUsAqK6.jpg

上圖
顯示了一個默認的路由配置,URL模式部分
url: "{controller}/{action}/{id}"
現在,我們將創建一個控制器並在該控制器中添加一個操作方法
在根目錄下的Controllers文件夾中進行以下建立一控制器

這邊命名為 BoxControllers
在 Views/Box 的資料夾下 建立 Index.cshtml

https://ithelp.ithome.com.tw/upload/images/20230929/20106640iuiH2fatuP.jpg

執行畫面如下
https://ithelp.ithome.com.tw/upload/images/20230929/20106640McLw3jHC30.jpg

URL是 https://localhost:44344/Box/Index
主機名: localhost:44344
控制器(controller): Box
方法: (action) Index

對應到以下公式

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Box", action = "Index", id = UrlParameter.Optional }
            );

上一篇
Day-13 ASP.NET MVC 之 路由
下一篇
Day-15 ASP.NET MVC 之 路由3
系列文
ASP.NET MVC基礎修練:從菜開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言