zoukankan      html  css  js  c++  java
  • [读书笔记]ASP.NET的URL路由引擎

    作用

    一般的URL:                                                                                                                                                   

    举例:http://www.myapp.com/app.aspx?id=2&sessionid=29320xafafa02fa0zga0g8a0z

    缺点:

    1. 不美观,不清晰
    2. 搜索引擎不友好,爬虫无法知道文件名后的更多地产品分类

      因此,需要把它映射成更简单易用、涵盖信息更广的URL。

                                                                                                                                         

    路由映射基础

    相关类:RouteCollection

    命名空间:System.Web.Routing

    方法:RouteCollection.MapPageRoute(),实例方法

    基本思路:要使用URL路由引擎,首先注册路线图。路线图只是从路径表达式到磁盘上的实际页面的一个映射。这些路径在应用程序启动时注册,注册操作通常包含在单独的方法中,如下面代码所示,代码段来自Global.asax.cs文件:

     1 void Application_Start(object sender,EventArgs e)
     2 {
     3    //Code that runs on application startup
     4   InitializeRoutes(RouteTable.Routes);  
     5 }
     6 private void InitializeRoutes(RouteCollection routes)
     7 {
     8   //...perform route registration
     9   routes.MapPageRoute(...);
    10 }

    注:routes为RouteCollection的实例

      下面总结URL路由的用法,基本上就是RouteCollection.MapPageRoute()的各种重载方法。

    1.映射基础URL

    1 routes.MapPageRoute("login","login","~/Login.aspx);  

    2.映射包含参数的URL

    1 routes.MapPageRoute("blog","blog/{year}/{month}/{day}","~/Blog.aspx");

      参数的查询不能通过Request.queryString来获取,因为参数并不是查询字符串的一部分,参数存在RouteData字典中。正确代码如下:

    1 protected void Page_Load(object sender,EventArgs e)
    2 {
    3     string year=RouteData.Values["year"] as string;
    4     string month=RouteData.Values["month"] as string;
    5     string day=RouteData.Values["day"] as string;
    6     //Perform blog processing based on date parameters
    7 }

    3.映射包含多个段的URL

      将一个星号(“*”)置于命名参数之前:

    1 routes.MapPageRoute("products-by-tag","products/tags/{*tagnames}","~/ProductsByTag.aspx");

      其中,tagnames中的各字段用单斜线(“/“)分割。

    4.使用包含默认参数的路由

    1 routes.MapPageRoute("category-browse","category/{categoryname}","~/Category.aspx",true,
    2                                  new RouteValueDictionary()
    3             {
    4               {"categoryname","explosives"}
    5             });

      注意的是,目标页面无需知道是否使用的时默认值,仅需从RouteData字典中捕获类别名称即可。

    5.使用约束路由

      这些约束采用正则表达式进行。

     1 routes.MapPageRoute(
     2   routeName:"constrained-blog",
     3   routeUrl:"cblog/{year}/{month}/{day}",
     4   physicalFile:"~/Blog.aspx",
     5   checkPhysicalUrlAccess:True,
     6   defaults: new RouteValueDictionary({{"year",DateTime.Now.Year.ToString()},...},
     7   constraints:new RouteValueDictionary() {
     8       {"year",@"d{0,4}"},
     9           {"month",@"d{0,2}"},
    10           {"day",@"d{0,1}" }
    11       }
    12  );   
  • 相关阅读:
    git pull 的时候 把本地的修改 覆盖远程端
    git 把其他分支上的文件拿来覆盖本地
    JS高德地图计算两地之间的实际距离
    C# 微信开发-----微信会员卡(三)激活会员卡
    C# 微信开发-----微信会员卡(二)
    Jquery点击div之外的地方隐藏当前div
    css好看的银行卡号样式
    C# 微信开发-----微信会员卡(一)
    Js操作Array数组
    好看的404代码
  • 原文地址:https://www.cnblogs.com/lsr-flying/p/4250350.html
Copyright © 2011-2022 走看看