zoukankan      html  css  js  c++  java
  • Routing

    Routing翻译过来是"路由选择", 负责ASP.NET MVC的第一个工作:识别URL,将一个Url请求"路由"给Controller。

    来了一个Url请求, 从中找到Controller和Action的值, 将请求传递给Controller处理。
    Controller获取Model数据对象,,并且将Model传递给View,最后View负责呈现页面。
    而Routing的作用就是负责分析Url, 从Url中识别参数。

    • Routing的作用

    首页地址是: localhost/home/index
    我们发现访问上面的地址,最后会传递给 HomeController中名为index的action(即HomeController类中的index方法)。
    当然服务器端不会自己去实现这个功能,  关键点就是在Global.asax.cs文件中的下列代码:

        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);
            }

    回来看我们的Url: localhost/home/index
    localhost是域名,所以首先要去掉域名部分: home/index
    对应了上面代码中的这种URL结构: {controller}/{action}/{id}
    因为我们建立了这种Url结构的识别规则,所以能够识别出 Controller是home,action是index,id没有则为默认值""。
    这就是Routing的主要作用:
    1.从Url中识别出数据。比如controller,action和各种参数。
    如果跟踪程序,接下来我们会跳转到HomeController中的Index()方法。
    2.根据识别出来的数据,将请求传递给Controller和Action。

    • Routing的使用

    使用Routing为ASP.NET MVC程序添加路由规则。
    使用MapRoute()方法,本质也是通过创建Route类的实例,为RouteCollection集合添加成员。
    这是最简单的为ASP.NET MVC添加识别规则的方法。此方法有如下重载:

    MapRoute( string name, string url);
    MapRoute( string name, string url, object defaults);

    name参数:
    规则名称,可以随意起名。不可以重名,否则会发生错误:
    路由集合中已经存在名为“Default”的路由。路由名必须是唯一的。
    url参数:
    url获取数据的规则,这里不是正则表达式,将要识别的参数括起来即可,比如: {controller}/{action}
    最少只需要传递name和url参数就可以建立一条Routing(路由)规则。比如实例中的规则完全可以改为:

    routes.MapRoute(
        "Default",
        "{controller}/{action}");

    defaults参数:
    url参数的默认值。如果一个url只有controller: localhost/home/
    而且我们只建立了一条url获取数据规则: {controller}/{action}
    那么这时就会为action参数设置defaults参数中规定的默认值。

    defaults参数是Object类型,所以可以传递一个匿名类型来初始化默认值:

    new { controller = "Home", action = "Index" }



  • 相关阅读:
    洛谷 P2330 [SCOI2005]繁忙的都市
    2016-2017 ACM-ICPC, Asia Tsukuba Regional Contest D Hidden Anagrams
    HDU1792A New Change Problem(GCD规律推导)
    HDU1222Wolf and Rabbit(GCD思维)
    poj2635The Embarrassed Cryptographer(同余膜定理)
    poj3270Cow Sorting(置换+贪心)
    计数排序(O(n+k)的排序算法,空间换时间)
    POJ1222EXTENDED LIGHTS OUT(高斯消元)
    BZOJ 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
    2301: [HAOI2011]Problem b ( 分块+莫比乌斯反演+容斥)
  • 原文地址:https://www.cnblogs.com/chrisghb8812/p/6086507.html
Copyright © 2011-2022 走看看