iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Software Development

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

Day-15 ASP.NET MVC 之 路由3

  • 分享至 

  • xImage
  •  

概述

在ASP.NET MVC 5中,我們可以使用區域(Area)來將模型、控制器和頁面劃分為獨立的功能節點。
在一個ASP.NET MVC 項目中,可以存在多套不同的模型、控制器和頁面組合。
這樣做助於將大型軟件系統分解為多個功能節點

使用Visual Studio 創建一個ASP.NET MVC 時,項目的根目錄中將包含一套模型、控制器和視圖,
如下圖
https://ithelp.ithome.com.tw/upload/images/20230930/20106640KK8FU80J29.jpg
如果專案比較龐大,
可以將圖中的MVC作為主要應用程序,
然後進一步劃分區域(Area),
每個區域又可以視為一個獨立的MVC組件,可用作分支應用程序。
這樣的組織方式有助於更好地管理和維護大型軟件專案。

建立區域
在 controllers 上 點選右鍵 –加入—控制器
https://ithelp.ithome.com.tw/upload/images/20230930/20106640Ogfd5LbMFs.jpg

下一步
選擇區域—MVC5區域

https://ithelp.ithome.com.tw/upload/images/20230930/20106640x81wh61CHA.jpg

這邊區域名稱先取 branch
https://ithelp.ithome.com.tw/upload/images/20230930/20106640AyqebF9jAb.jpg

會自己產生 Aresa 的資料夾
branch 就在下方

https://ithelp.ithome.com.tw/upload/images/20230930/201066409avMpzDHsV.jpg

區域結構

在ASP.NET MVC 中,
所有區域都存放在根目錄下的"Areas"文件夾中。
每個區域都有一個以區域名稱命名的子文件夾,該子文件夾包含一個完整的MVC結構

在Areas\branch 文件夾中,
有3個子文件夾,分別是Controllers、Models和Views,這恰好對應了MVC結構中的三個必要元素:

Controllers(控制器):這個文件夾用於存放該區域的控制器。所有與branch區域相關的控制器都在這個文件夾中。

Models(模型):這個文件夾用於存放該區域的模型。所有與branch區域相關的模型都在這個文件夾中。

Views(視圖):這個文件夾用於存放該區域的頁面。所有與branch區域相關的頁面都在這個文件夾中。

區域路由

對於我們剛剛新建的 branch 區域,該區域的路由是在Areas\branch文件夾下的
branchAreaRegistration.cs類文件中配置的。
區域路由的配置類文件的命名方式為
“區域名稱 + AreaRegistration.cs”。
https://ithelp.ithome.com.tw/upload/images/20230930/20106640MZHoQgBGq3.jpg

區域路由的配置需要在特定的類別中進行,
這些類別需要繼承自 AreaRegistration 。
AreaRegistration 類別提供了在 ASP.NET MVC 應用程式中一個或多個區域的方式。
在這些類別中,需要覆寫兩個方法:

AreaName:這個方法用於獲取要的區域的名稱。

RegisterArea:使用指定區域的上下文資訊,在 ASP.NET MVC 應用程式中註冊該區域。

區域路由的配置工作通常在 RegisterArea() 方法中完成,
會使用 AreaRegistrationContext 類別的參數來註冊路由。
AreaRegistrationContext 類別封裝了在 ASP.NET MVC 應用程式中註冊特定區域所需的相關資訊。

https://ithelp.ithome.com.tw/upload/images/20230930/20106640lqoDQSoI0H.jpg

路由配置解釋如下:
路由名稱為 branch_default。
路由模式為:branch/{controller}/{action}/{id}。
路由的預設值為 action 的值為 Index,id 為可選項。
需要注意的是,從路由模式來看,該路由的 URL 地址必須以 "branch" 開頭,也就是區域的名稱。
一旦區域路由在 RegisterArea() 方法中配置完成,還需要在 Global.asax 檔案中進行註冊。

Route 命名空間
命名空間對於 ASP.NET MVC 是相當重要的,
特別是在存在多個區域的情況下。
當整個專案中存在相同名稱的控制器時,
例如兩個區域中都有一個名稱為 "HomeController" 的控制器,甚至在專案的根目錄下也有相同名稱的控制器時,就會發生這種情況。

雖然可以為每個區域單獨註冊路由,但路由引擎需要在整個路由表中進行搜索。
如果我們指定了命名空間,路由引擎將僅在指定的命名空間內搜索路由。這樣可以縮小匹配路由時控制器的候選範圍,
只有在該命名空間中的控制器才有可能與該路由匹配。

在 ASP.NET MVC ,我們可以使用 MapRoute() 方法的 namespaces 參數,該參數的類型是 string[],用來指定命名空間的數組。這樣可以確保路由引擎僅在指定的命名空間中查找控制器,提高了路由的精確性。

https://ithelp.ithome.com.tw/upload/images/20230930/20106640fHlIXxb9aY.jpg
在 MapRoute() 方法的第 4 個參數中使用了 new string[],
來指定一個陣列,其中包含了命名空間的值。
這個值可以是單個的命名空間,也可以是多個命名空間。

一旦指定了這些命名空間,路由引擎就會專注於這些命名空間內,僅在以下命名空間中查找控制器:
MVC30dayRoute.Route.Areas.branch.Controllers
這樣的做法可以提高路由引擎的搜索速度,因為它不需要在整個應用程序中搜索控制器,
而只需在指定的命名空間內進行搜索。這種精確的搜索方式有助於優化應用程序的性能。


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

尚未有邦友留言

立即登入留言