第十六章 提升用户体验 之 设计实现routes

1. 概述

  ASP.NET MVC route 用来把URL映射到方法中的action,是用户和程序之间的桥梁。

  本章内容包括:定义route处理URL Pattern、应用route限制、忽略URL Pattern、添加route参数、定义areas分组。

2. 主要内容

  2.1 定义route处理URL Pattern

    route解析的灵活性使得URL可以更加的易于理解,又增加了搜索引擎友好性。

    routes保存在一个独立的 RouteCollection对象中。 App_Start/RouteConfig.cs文件中的RegisterRoutes方法用来添加route。

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute( 
        name: "Default", 
        url: "{controller}/{action}/{id}", 
        defaults: new { controller = "Home",  
            action = "Index", id = UrlParameter.Optional }, 
        constraints: new { id = @"\d+" } 
     ); 
}

  2.2 应用route限制

    route限制是一个附加的过滤器,有助于更精确快速的找到请求的资源。

routes.MapRoute( 
    name: "Videos", 
    url: "Product/Details/{id}", 
    defaults: new { controller = "DVD", action = "Index",  
      Page = UrlParameter.Optional }, 
    constraints: new { id = @"[a-zA-Z]+"}); 
 
routes.MapRoute( 
    name: "Videos2", 
    url: "Product/Details/{id}", 
    defaults: new { controller = "DVD", action = "Details", 
      Page = UrlParameter.Optional }, 
    constraints: new { id = @"\d+" });

  2.3 忽略URL Pattern

    用于忽略的Route,是一种灵活的附加功能,可以提高站点的可预见性和安全性。

routes.Ignore("{*allhtml}", new {allhtml=@".*\.htm(/.*)?});

  2.4 添加route参数

    route参数可以为映射提供更多的灵活性。

routes.MapRoute( 
                name: "GeneralListDateRange", 
                url: "{controller} /List/{param1}/{ param2}/{ param3}", 
                defaults: new { controller = "Article", param1= UrlParameter.Optional,  
                       param2= UrlParameter.Optional, param3= UrlParameter.Optional }, 
 
);

  2.5 定义areas

    area用来把一组controllers, views, 和 models 按照一定的功能性组织到一起,多用于大项目中。

    areas间的交互:

@Html.ActionLink("Product Detail", "Product", "Detail", 
       new { area="ShoppingSite"}, null)

3. 总结

  ① route使得站点url更加简单易读,有利于SEO.

  ② route的添加顺序很重要。先添加ignore route。

  ③ 创建route时,可以在任何可能为空的地方添加默认值。

  ④ Constraints是一种过滤请求Url的方式,可以根据不同route中的变量类型和内容来过滤。

  ⑤ 大型项目中,action的数量可能会巨大。使用areas可以划分逻辑性分组。每一组包含独立的route管理。

posted @ 2016-02-24 18:07  stone lv  阅读(184)  评论(0编辑  收藏  举报