路由:

RouteCollection 对象。

 

 


Route类


  名称 说明
Constraints 获取或设置为 URL 参数指定有效值的表达式的词典。
DataTokens 获取或设置传递到路由处理程序但未用于确定该路由是否匹配 URL 模式的自定义值。
Defaults 获取或设置要在 URL 不包含所有参数时使用的值。
RouteHandler 获取或设置处理路由请求的对象。
Url 获取或设置路由的 URL 模式。
以及4个重载的构造函数
 

在最简单的构造函数中,需要传入URL模式和路由处理程序两个参数,而最复杂的则需要Route类中的5个基本属性

 

 Route route = new Route(
                "Home/Index",                                                           // 路由名称             
                new RouteValueDictionary {{"controller","Home"},{"action","Index"}},    // 默认值
                new RouteValueDictionary {{"date",@"\d{2}-\d{2}-\d{4}"}},             // 约束
                new RouteValueDictionary {{"namespaces","Guest"}},                   // 命名空间 
                new MvcRouteHandler()                                            // 路由处理程序
            );

 

RouteCollection类

在实际应用中,需要创建多个路由,而RouteCollection类就是用来管理这些路由集合的

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

MapRoute()扩展方法

  名称 说明
MapRoute(RouteCollection, String, String) 映射指定的 URL 路由。
MapRoute(RouteCollection, String, String, Object) 映射指定的 URL 路由并设置默认路由值。
MapRoute(RouteCollection, String, String, String[]) 映射指定的 URL 路由并设置命名空间。
MapRoute(RouteCollection, String, String, Object, Object) 映射指定的 URL 路由并设置默认路由值和约束。
MapRoute(RouteCollection, String, String, Object, String[]) 映射指定的 URL 路由并设置默认的路由值和命名空间。
MapRoute(RouteCollection, String, String, Object, Object, String[]) 映射指定的 URL 路由并设置默认的路由值、约束和命名空间。

从上表中可以看出,各种扩展方法输入参数仍然是Route类中的5个基本属性,不过通过定义新的扩展方法,这些属性的类型有所改变,方便设置

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            routes.MapRoute(
                name: "Default",                                                                    //1 路由名称
                url: "{controller}/{action}/{id}",                                                  //2 URL 模式
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } //3 路由默认值 不再用RouteValueDictionary,简洁明了
            );
        }

URL 模式

文本和占位符位于由斜杠 (/) 字符分隔的 URL 段中。

 

对于路由,键是在 URL 模式中定义的占位符名称,只有值位于 URL 中。

 

country 占位符的值分隔开。

 

下表演示有效的路由模式和一些与模式匹配的 URL 请求的示例。

 

 

 

路由定义

匹配 URL 示例

{controller}/{action}/{id}

/Products/show/beverages

{table}/Details.aspx

/Products/Details.aspx

blog/{action}/{entry}

/blog/show/123

{reporttype}/{year}/{month}/{day}

/sales/2008/1/5

{locale}/{action}

/US/show

{language}-{country}/{action}

/en-US/show

 

在存在多个路由的情况下,需要注意URL模式的顺序,因为路由匹配规则是由上而下,一旦找到匹配项就会停止匹配,并将请求转交处理程序,因此如果要做一些特殊的操作,则要将相应的路由放到前列

相关文章:

  • 2022-02-11
  • 2021-05-19
  • 2022-12-23
  • 2022-12-23
  • 2021-07-04
  • 2021-12-11
猜你喜欢
  • 2021-09-16
  • 2022-12-23
  • 2021-12-31
  • 2022-12-23
  • 2022-02-03
  • 2021-05-16
相关资源
相似解决方案