ASP.NET MVC2 學習筆記之URL路由

    新建一個默認的ASP.NET MVC2應用程序,系統會默認的生成包含基本功能的應用程序,查看這些生成的代碼,可幫助我們理解ASP.NET MVC2。下面是對URL路由的理解,以備忘。

一、Global.asax.cs中的代碼:

public class MvcApplication : System.Web.HttpApplication

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(

                "Default",                                   // Route name

                "{controller}/{action}/{id}",                // URL with parameters

                new { controller = "Home", action = "About", id = "" }  // Parameter defaults

            );

        }

        protected void Application_Start()

        {

            RegisterRoutes(RouteTable.Routes);

        }

}

Application_Start是網站啓動後最先執行的事件,所以對網絡路由的設置放在此處,具體通過方法routes.MapRoute("Default", "{controller}/{action}/{id}",  new {controller = "Home", action = "Index", id = ""} );實現,方法的第一個參數是路由的名字,假如映射多個路由的時候,名字不能重複;第二個參數是Url的格式;第三個參數是個匿名對象,這個匿名對象所表達的是按照第二個參數格式所對應的默認的controlleraction以及id是什麼,上述代碼中,默認ControllerHome,默認的actionAbout,默認的id爲“”。

注意到代碼:routes.IgnoreRoute("{resource}.axd/{*pathInfo}");其作用是防止ASP.NET窗體的請求被路由到ASP.NET MVC中,如程序根目錄下有個hello.htm的文件,那麼輸入:http://localhost/hello.htm,此URL鏈接將不會被路由解析。

如何對ASP.NET窗體強制實施路由解析呢,可參考default.aspx.cs中的處理。

二、Default.asax.cs中的代碼:

public void Page_Load(object sender, System.EventArgs e)

        {

            // Change the current path so that the Routing handler can correctly interpret

            // the request, then restore the original path so that the OutputCache module

            // can correctly process the response (if caching is enabled).

            string originalPath = Request.Path;

            HttpContext.Current.RewritePath(Request.ApplicationPath, false);

            IHttpHandler httpHandler = new MvcHttpHandler();

            httpHandler.ProcessRequest(HttpContext.Current);

            HttpContext.Current.RewritePath(originalPath, false);

        }

其原理是改變當前路徑,使得變更後的路徑能被路由解析,然後改回原處理路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章