zoukankan      html  css  js  c++  java
  • mvc路由5大属性

    Defaults:

    Url包含的段的数量可以比于其匹配的模式中的url参数的数量少,如:

    http://localhost:8001/blog/2011/11没有day参数的指定数值,在这种情况下,需要为缺少的参数指定默认值,可以通过Defaluts属性完成

     

    Defaults是一个RouteValueDictionary对象,该对象为每个希望为其提供默认值的参数包含一个条目:RouteValueDictionary类是一个与常规字典类似的键/值对集合,但具有有一些特定的方法,这些方法使得路由引擎能够工作,并且是创建该类的实例更加容易。

    示例:

    匿名类型创建,每个属性作为健的名称:

     

     blog.Defaults = new RouteValueDictionary(

                    new

                    {

                        year="2011",

                        month="11",

                        day="0"

                    }

                    );

     集合初始化程序,需要想构造器传递一个键/值对的集合

       blog.Defaults =new RouteValueDictionary {

                    {"year",2009},

                    {"month",11},

                    {"day",0}

                };

    Constraints:

    Constraints包含针对url参数验证规则的字典,constraints属性也是RouteValueDictionary类型,在该属性中键是参数名称,值是验证规则

     

    Constraints验证规则一:

    正则表达式:

     blog.Constraints = new RouteValueDictionary(

                     new {

                      year=@"\d{2}|\d{4}",

                      month = @"\d{1,2}",

                      day=@"\d{1,2}"}

                   );

    IRouteConstraint:

    如果不能满足你的需求,可以通过实现一个IRouteConstraint接口类编写自己的约束:

    示例:

     public class DataIsVaildConstraint : IRouteConstraint

        {

            #region IRouteConstraint 成员

            public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)

            {

                try

                {

                    DateTime date = new DateTime(

                         Convert .ToInt32(values["year"]),

                         Convert.ToInt32 (values ["month"]),

                         Convert.ToInt32 (values ["day"])

                        );

                    return true;

                }

                catch

                {

                    return false;

                }

            }

     #endregion

    }

    修改Constraints属性:

     blog.Constraints = new RouteValueDictionary(

                     new {

                      year=@"\d{2}|\d{4}",

                      month = @"\d{1,2}",

                      day=@"\d{1,2}",

                      urldate = new DataIsVaildConstraint()

                    

                     }

                    );

                    );

    备注:自定义的约束被应用于虚拟的url参数(urldate)。这样做的原因有2:

    1.必须是数字。这个三个参数,框架已经验证,验证函数就不需要在重复工作

    2.约束不是限定一个参数而是全部参数,因此将约束仅限一个参数并不好

  • 相关阅读:
    51Nod 2006 飞行员配对(二分图最大匹配)-匈牙利算法
    51Nod 1212无向图最小生成树
    51Nod 1081前缀和
    51Nod 1118 机器人走方格--求逆元
    Java四种线程池的使用
    java常用的几种线程池比较
    一名3年工作经验的程序员应该具备的技能(写得很好,果断转)
    《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
    javadoc
    java 反射机制 观点
  • 原文地址:https://www.cnblogs.com/linsu/p/2413520.html
Copyright © 2011-2022 走看看