zoukankan      html  css  js  c++  java
  • MVC 路由模块分析(一)

    概述

    主要分为四个部分进行分析。

    First ——Usage;

    then ——Extension;

    and then ——Design;

    last ——Test。

    1. Usage

    1.1 Display RouteData的值

    MVC针对每一个请求,都会将请求转化为一个RouteData对象,添加到全局路由表中。

    RouteData是一个包装类,可以打印其Values和DataTokens。

    Eg1:

    <tr>
        <td>Values:</td>
        <td>
            <ul>
                <% foreach (var tmp in RouteData.Values)
                    {
                %>
                <li>
                    <%= tmp.Key %> = <%= tmp.Value %>
                </li>
                <%
                    } %>
            </ul>
        </td>
    </tr>
    <tr>
        <td>DataTokens:</td>
        <td>
            <ul>
                <% foreach (var tmp in RouteData.DataTokens)
                    {
                %>
                <li>
                    <%= tmp.Key %> = <%= tmp.Value %>
                </li>
                <%
                    } %>
            </ul>
        </td>
    </tr>

    Eg2:

    public ActionResult RouteDemo()
    {
        foreach (var route in RouteTable.Routes)
        {
            var data = route.GetRouteData(HttpContext);
            Console.WriteLine(route.GetType().FullName);
        }
        return View();
    }

    1.2路由到物理文件

    使用MapPageRoute方法完成此项功能。

    步骤:

    l 定义URL模板;

    l 创建defaults字典;

    l 创建dataTokens字典;

    l 创建constraint字典;

    l 调用MapPageRoute方法

    var defaults = new RouteValueDictionary();
    defaults.Add("areacode", "010");
    defaults.Add("days", "2");
    
    var constraints = new RouteValueDictionary();
    constraints.Add("areacode", @"0d{2,3}");
    constraints.Add("days", @"[1-3]{1}");
    
    var dataTokens = new RouteValueDictionary();
    dataTokens.Add("defaultCity", "深圳");
    dataTokens.Add("defaultDays", "200000");
    
    RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}", "~/Views/Home/RouteDemo.aspx", false, defaults, constraints, dataTokens);

    1.3路由忽略

    调用Ignore方法

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{filename}.css/{*pathInfo}"); //忽略*.css文件的路由

    1.4直接注册路由

    MapRoute方法实质上就是将路由对象(RouteBase的子类,如Route)添加到路由表中,故而可以直接添加。

    Route route2 = new Route("{areacode}/{days}", defaults, constraints, dataTokens, new PageRouteHandler("~/Views/Home/RouteDemo.aspx"));
    RouteTable.Routes.Add(route2);

    1.5缺省URL参数

    id = UrlParameter.Optional

    表明最后一个参数是可选的。此处可以猜测,存在一个解析器来判断UrlParameter。

     

    敬请期待~~

  • 相关阅读:
    聊天的时间显示
    Android下Affinities和Task
    android Notification 的使用
    Android Notification使用及取消
    类似微信发图片的样式
    Delphi---TServerSocket和TClientSocket发送和接收大数据包
    使用拷贝文件测试(BufferedInputStream,FileInputStream)
    android-getTextSize返回值是以像素(px)为单位的,setTextSize()以sp为单位
    怎样成为PHP 方向的一个合格的架构师
    mac 查看某个文件夹下所有隐藏文件(夹)的大小
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3819256.html
Copyright © 2011-2022 走看看