ASP.NET MVC路由解析


繼續往下看《ASP.NET MVC5框架揭秘》。 

ASP.NET系統通過注冊路由和現有的物理文件路徑發生映射。而對於ASP.NET MVC來說,請求的是某個Controller中的具體的Action方法。

路由注冊和忽略的方法與ASP.NET不同,位於RouteCollectionExtensions中。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  );
UrlParameter.Optional表示只有請求的URL真正包含具體變量值時RouteData里才會有相應的變量存儲。
Area路由映射
場景:假設在Controller下有一個文件夾api,里面包含了用來調用的api。而且api目錄下的Controller可能包含和Controller目錄下相同命名的Controller。
這個時候可以通過AreaRegisteration來實現。AreaRegisteration是一個抽象類。
public abstract class AreaRegistration
    {
        protected AreaRegistration();
        public abstract string AreaName { get; } public static void RegisterAllAreas();
        public static void RegisterAllAreas(object state);
        public abstract void RegisterArea(AreaRegistrationContext context);
    }

建一個ApiAreaRegisteration,實現抽象方法和屬性。

public class ApiAreaRegisteration :AreaRegistration
    {
     //返回一個Area名
public override string AreaName { get { return "api"; } }    public override void RegisterArea(AreaRegistrationContext context) { object defaults = new { Controller = "utility", Action = "Add", num = 1 }; context.MapRoute("apidefault","api/{controller}/{action}/{num}",defaults,new string[]{"MvcTest.Controllers.api"}); } }

在global.asax里注冊

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
        }
AreaRegistrationContext 是對應的上下文包含AreaName、Routes等信息和一系列注冊路由的方法。
調用
AreaRegistration.RegisterAllAreas()靜態方法后,會反射創建ApiAreaRegisteration 對象,調用RegisterArea()方法實現路由注冊。

注:本博文大多數內容來自《ASP.NET MVC5框架揭秘》中,只是做內容的梳理和總結。


免責聲明!

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



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