MVC之路由規則 (自定義,約束,debug)


 

自定義路由規則的要求,小范圍寫在前,大范圍寫在后。
路由規則可以注冊多條,
路由規則的名稱不能重復
路由規則有順序,並且按照順序進行匹配,建議小范圍寫在前,大范圍寫在后。
路由規則可以設置約束 即正則表達式
路由規則匹配的控制器可以設置命名空間約束

routes.MapRoute(
name: "NewShow",
url: "{year}-{month}-{day}-{id}",
defaults: new { controller = "News", action = "Show" },
constraints:new
{
year=@"^\d{4}$",
month = @"^\d{1,2}$",
day = @"^\d{1,2}$"
}
);

routes.MapRoute(
// 1.參數name設置路由規則的名稱必須是唯一的,重復會報異常默認添加”Default”的路由規則
name: "Default",
//2.參數url設置url的路由規則,可變的值使用{}括起來關鍵字controller、action名稱不可變
url: "{controller}/{action}/{id}",
//3.參數defaults設置路由規則中參數的默認值類型為object,可以傳遞一個匿名對象,屬性取決於規則中定義的參數參數UrlParameter.Optional表示可選的只讀參數如果在實際的url中沒有指定路由規則中某些參數,則會使用默認值作為參數的值使用
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

路由中的幾個對象:
1.路由規則Route:可以查看源代碼了解一下構造方法,需要指定路由格式,默認值,處理器三個值。代碼如下:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

2. 路由數據RouteData:當前請求上下文匹配路由規則而得到的一個對象,可以在Action中通過RouteData.GetRequestString("controller/action")獲取本些請求中控制或行為的真實名稱

3.路由集合RouteCollection:存放路由規則的集合Collection<RouteBase>,一個MVC項目中,可以配置多個路由規則,按照鍵值對的格式存儲到路由集合中
4.路由表RouteTable:類中包含靜態的RouteCollection屬性,完成所有路由規則的全局存儲,在Global中完成注冊


客戶的請求過程為:
當一個客戶請求過來時,HttpContext請求到RouteCollection中去RouteTable中的第個鍵值對的Route比對 如果有一個比對路由規則比對成功,則生成一條RouteData數據進而跳轉到對應Cotroller的Action中去進行相應的處理。

 

 

 

routes.MapRoute(
// 1.參數name設置路由規則的名稱必須是唯一的,重復會報異常默認添加”Default”的路由規則
name: "Default",
//2.參數url設置url的路由規則,可變的值使用{}括起來關鍵字controller、action名稱不可變
url: "{controller}/{action}/{id}",
//3.參數defaults設置路由規則中參數的默認值類型為object,可以傳遞一個匿名對象,屬性取決於規則中定義的參數參數UrlParameter.Optional表示可選的只讀參數如果在實際的url中沒有指定路由規則中某些參數,則會使用默認值作為參數的值使用
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);路由的調試,在我們開發的 時候可以使用RouteDeugger進行路由的調試,看我們寫的路由有沒有啟作用,用法 如下把RouteDebug.dll添加引用,在Global.asax.cs中注冊路由之后 添加 RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM