2017年9月18日 星期一

[MVC] Routing Engine (1)

  • ASP.NET MVC 請求生命周期
    • 所有網站溝通都是使用 URL 進行請求,ASP.NET MVC 也是一樣,在 URL 中沒有說明 ASP.NET Routing framework,但 ASP.NET Routing framework 是每個 ASP.NET MVC 請求的核心
    • ASP.NET Routing 是模式匹配系統。程序啟動時,註冊一個或多個 Framework Route 表示告訴 Routing System 遇到匹配模式應該怎麼進行
    • Routing Engine 接收一個請求時,它會用這個請求的 URL 來和註冊 URL Patterns 匹配。Routing Engine 在它的 Route Table 發現匹配模式,會將請求提交對應的處理程序 (Controller)
  • ASP.NET Routing 
    • 如果請求 URL 沒有任何註冊 Routing 匹配,Routing Engine 會返回 404 來表達無法找到對應處理程序
  • Routing Engine
    • ASP.NET MVC Routes 負責決定那個 Controller 方法與 Controller 動作,執行給的URL
    • 創建 MVC 空專案,基本就會先創建一組  MVC Routes,並且註冊至 Global.asax 中
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCRouting
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            // 忽略所有 *.axd 的網址路徑
            // 在預設 RegisterRoutes 方法中的 IgnoreRoute 用來定義 不要透過 Routing 處理的網址
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            // Routing 網址路徑
            // MapRoute 則是最常用來定義 Routing 規則的擴充方法
            routes.MapRoute(
                name: "Default",                    // 路由名稱:唯一名稱對應唯一的 Route
                url: "{controller}/{action}/{id}",  // URL 及參數:通過簡單的模式,將 URL 解析具有意義的字段
                defaults: new                       // 參數預設值
                {
                    controller = "Home",            // 默認值:提供與對應字段的默認值
                    action = "Index",
                    id = UrlParameter.Optional
                    // constraints                  // 約束:一系列的約束應用到 URL 模式上
                                                    //       用來嚴格定義 URL 對應 Route
                } 
            );
        }
    }
}

沒有留言:

張貼留言