zoukankan      html  css  js  c++  java
  • 认识 ASP.NET 3.5 MVC 路由 理解默认路由表

    理解默认路由表

    当你创建一个新的ASP.NET MVC应用程序时,应用程序已经被配置为使用ASP.NET路由。ASP.NET路由在两个地方设置。

    第一点,在你的应用程序Web配置文件(Web.config文件)中启用ASP.NET路由。在配置文件中有四个节点与路由有关:sytem.web.httpModules节,system.web.httpHandlers节,system.webserver.modules节,以及system.webserver.handlers节。特别要小心不要删除了这些节点,因为没有它们路由将不能工作。

    第二点,也是更为重要的一点,在应用程序的Global.asax文件中创建了一个路由表。Global.asax文件是一个特殊的文件,它包含了作用于ASP.NET应用程序生命周期事件的事件处理程序。路由表在Application Start事件期间创建。

    ASP.NET MVC应用程序的默认Global.asax文件内容如下:

    namespace MvcApplication
    {
        // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
        // visit http://go.microsoft.com/?LinkId=9394801
    
        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 = "Index", id = "" }  // Parameter defaults
                );
    
            }
    
            protected void Application_Start()
            {
                RegisterRoutes(RouteTable.Routes);
    
                RouteTable.Routes.RouteExistingFiles = false;
    
                RouteMonitor.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
            }
        }
    }

    当一个MVC应用程序首次运行时,会调用Application_Start()方法。这个方法随后调用了RegisterRoutes()方法。RegisterRoutes()方法创建了路由表。

    默认的路由表包含了一个路由(名叫Default)。Default路由将URL的第一部分映射到控制器名,URL的第二部分映射到控制器动作,第三个部分映射到一个叫做id的参数。

    假设你在浏览器的地址栏输入了下面的URL:

    /Home/Index/3

    默认的路由将这个URL映射为下面的参数:

    Controller = Home

    Action = Index

    id = 3

    当你请求URL /Home/Index/3时,将会执行下面的代码:

    HomeController.Index(3)

    Default路由包含了所有三个参数的默认值。如果你不提供控制器,那么控制器参数默认值为Home。如果你不提供动作,动作参数默认为值Index。最后,如果你不提供id,id参数默认为空字符串。

     

    Default路由是如何将URL映射到控制器动作的

    设想你在浏览器地址栏输入了下面的URL:

    /Home

    由于Default路由参数的默认值,输入这个URL将会调用HomeController类的Index()方法。

    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        [HandleError]
        public class HomeController : Controller
        {
            public ActionResult Index(string id)
            {
                return View();
            }
        }
    }

    HomeController类包含了一个叫做Index()的方法,它接受一个叫做Id的参数。URL /Home将会导致调用Index()方法,并使用空字符串作为Id参数的值。

    出于MVC框架调用控制器动作的方式,URL /Home也匹配以下中HomeController类的Index()方法。

    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        [HandleError]
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
        }
    }

    以上代码的Index()方法不接受任何的参数。URL /Home将会导致调用这个Index()方法。URL /Home/Index/3也会调用这个方法(Id被忽略)。

    URL /Home也会匹配以下代码HomeController类的Index()方法

    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        [HandleError]
        public class HomeController : Controller
        {
            public ActionResult Index(int? id)
            {
                return View();
            }
        }
    }

    Index()方法拥有一个整数参数。因为这个参数是一个可空参数(可以拥有Null值),因此可以调用Index()而不会引发错误。

    最后,使用URL /Home 调用以下代码中的Index()方法将会引发一个异常,因为Id参数并非一个可空参数。如果你试图调用Index()方法,那么你将会获得一个错误。

    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        [HandleError]
        public class HomeController : Controller
        {
            public ActionResult Index(int id)
            {
                return View();
            }
        }
    }
  • 相关阅读:
    【python3的进阶之路一】正则表达式
    基础编程练习50道
    【python3的学习之路十四】IO编程
    【python3的学习之路十三】错误和调试
    【python3的学习之路十二】面向对象高级编程
    【python3的学习之路十一】面向对象编程
    jQuery之防止冒泡事件,冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件。
    手机移动端WEB资源整合
    js 验证表单 js提交验证类
    js单条新闻向上滚动
  • 原文地址:https://www.cnblogs.com/dupeng0811/p/1576326.html
Copyright © 2011-2022 走看看