文/QLeelulu  出处/博客园

定义URL Routing

在一个route中,通过在大括号中放一个占位符来定义( { and } )。当解析URL的时候,符号"/"和"."被作为一个定义符来解析,而定义符之间的值则匹配到占位符中。route定义中不在大括号中的信息则作为常量值。
下面是一些示例URL:

附件: 2008-03-17_213118.gif

通常,我们在Global.asax文件中的Application_Start事件中添加routes,这确保routes在程序启动的时候就可用,而且也允许在你进行单元测试的时候直接调用该方法。如果你想在单元测试的时候直接调用它,注册该routes的方法必需是静态的同时有一个RouteCollection参数。
下面的示例是Global.asax中的代码,演示了添加一个包含两个URL参数action 和 categoryName的Route对象:

protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add(new Route
    (
        "Category/{action}/{categoryName}"
        , new CategoryRouteHandler()
    ));
}


设置Route参数的默认值

当你定义个一route的时候,你可以分配一个默认值给route的参数。默认值是当URL中没有包含参数的值的时候使用的。你可以在Route类中通过dictionary来设置Default属性来设置route的默认值:

void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
  routes.Add(new Route
  (
    "Category/{action}/{categoryName}"
          new CategoryRouteHandler()
  )
    {
      Defaults = new RouteValueDictionary
          {{"categoryName", "food"}, {"action", "show"}}
    }
  );
}


当URL Routing处理URL Request的时候,上面route定义产生的结果如下表所示: 


附件: 2008-03-17_213133.gif
TOP