从.NET框架3.5 SP1开始,微软推出了ASP.NET路由支持,从而实现了特定资源的URL与其对应的Web服务器上的物理文件之间的彻底解耦。借助于ASP.NET路由支持,开发人员可以定义一组路由规则,从而实现把路由模式映射到一个生成相应内容的类。例如,你可以把URL“Categories/CategoryName”映射到一个类,该类接收CategoryName而最终生成对应于此种类的产品信息显示于一个网格中的一组HTML标记。有了这样的映射,用户便可以通过访问www.yoursite.com/Categories/Beverages">www.yoursite.com/Categories/Beverages来查看饮料种类对应的所有产品信息。

  在.NET 3.5 SP1中,ASP.NET路由主要是为ASP.NET MVC应用而设计的,虽然在非ASP.NET MVC框架支持的Web窗体应用程序中也有可能实现ASP.NET路由支持。然而,在Web窗体应用程序中实现ASP.NET路由会涉及大量额外的工作。

  在Web窗体中,通常情况下,我们都要把路由模式映射到一个实际的ASP.NET页面。为此,我们需要创建一个路由处理类以便在请求路由URL时调用之,并且在一定意义上实现了把请求调度到适当的ASP.NET页面。例如,为了把一个路由映射到一个物理文件,比如把Categories/CategoryName映射到ShowProductsByCategory.aspx,我们需要如下三个步骤:

  (1)在Global.asax文件中定义映射,用于把路由模式映射到一个路由处理类;

  (2)创建路由处理类,它负责解析网址,把所有路由参数存储到一些目标页面可以访问到的位置(如HttpContext.Items),并返回一个目标页面或处理请求路由的HTTP处理器的实例;

  (3)在目标页面中编写代码来获取路由参数,并使用他们生成页面内容。

  且不说花费了多大的代价仅仅读取前面的语句(更不用担编写之),你完全能够想象到—在Web窗体应用程序中执行ASP.NET路由不一定是开发人员最直接的任务。

  值得庆幸的是,ASP.NET 4.0通过添加一组类和助理方法极大地简化了ASP.NET路由在Web窗体应用程序中的使用。使用ASP.NET 4.0,你会更容易地定义路由规则,而不再需要创建一个自定义路由处理类。本文将详细探讨这方面的改进支持。

  一、ASP.NET路由技术概述

  ASP.NET路由能够干净地实现URL与网页文件名之间的解耦,从而可用于创建干净、简洁且搜索引擎友好的网址。有关为什么应该在Web应用程序中使用ASP.NET路由的详细讨论,在此不作详细讨论,请参考其他有关文章。

  概括地说,ASP.NET路由允许开发人员定义路由规则,从而实现把一个路由模式(如Categories/CategoryName)映射到一个处理请求的类。这些路由规则在应用程序启动时就已经定义在文件Global.asax中的Application_Start事件处理程序中。

  在Web窗体应用程序中,我们可能已经拥有了产生我们感兴趣内容的ASP.NET网页,我们只需要通过路由规则把路由模式映射到这些ASP.NET页面—通过把任何路由参数(例如CategoryName)映射到该ASP.NET页面来实现。当在ASP.NET 3.5 SP1中使用ASP.NET路由时,没有方法直接把路由模式映射到ASP.NET页。相反,我们必须创建一个路由处理类,它负责传递有关传入请求的信息,并且必须返回一个HTTP处理程序来处理此请求。通常,在Web窗体应用程序中一个路由处理类执行以下步骤:

  (1)根据需要解析网址,或许研究某些路由参数,并以这些值为基础作出决定。

  (2)从需要被传递到ASP.NET页面或HTTP处理程序(它们将处理这一请求)的URL加载任何路由参数。总之,我们要确保ASP.NET页面会生成实际内容,因为此请求知道所有路由参数(如CategoryName)的值。一个传达这样的信息的办法是,把它们放在HttpContext.Items集合中—此集合担当存储特定长度的请求信息的数据存储信息库的作用。

  (3)返回执行上述处理的ASP.NET页面或HTTP处理程序的实例。

  通常,这些路由处理程序类具有差不多相似的特征。你把路由参数存储到HttpContext.Items集合中,然后创建并返回一个负责生成该网址对应内容的ASP.NET页面的实例。尽管路由处理类具有相似特征,但是编写这些类是一项冗长的任务,因为每个新路由都需要一个新的处理程序类,而此类需要实现几乎与前一个类同样的任务。

  在ASP.NET 3.5 SP1中使用ASP.NET路由的另一种挑战主要与负责生成最终内容的ASP.NET页面相关。此页面必须从HttpContext.Items集合((或其它其他存储它们的路由处理程序类)中读出路由参数。此外,为一个超链接或Response.Redirect调用生成路由友好的URL(如Categories/CategoryName)的语法也有点冗长和混乱。

  在ASP.NET 4.0中,路由支持得到了增强,包括一些新的路由相关的方法,从而使定义映射到实际ASP.NET页面的路由规则更加简单。在ASP.NET 4.0中,你不再需要创建自定义路由处理程序类作为中介,而只需要从Global.asax文件中的路由规则中直接引用ASP.NET页面即可。当从路由规则中指定一个ASP.NET页面时,路由参数被自动存储在一个新的RouteData集合中,此集合可以从ASP.NET页面中通过Page.RouteData结构进行访问。更重要的是,在.NET框架4.0中包括一个自定义参数控件,这样一来,你可以使用声明的方式从ASP.NET的数据源控件(如SqlDataSource和LinqDataSource等)中使用RouteData中的值,而且也提供了一些方法来生成路由友好的URL,以及重定向到路由友好的网址。

  本文将重点讨论ASP.NET在ASP.NET 4.0中的路由系统改进支持。本文提供的演示程序是一个Web窗体应用程序,这是一个罗斯文商贸网站的前端。它使用了ASP.NET路由支持来创造简洁且搜索引擎友好的网址。例如,/Categories/All将显示所有类别,Categories/Beverages将列出属于饮料类的所有产品,而/Products/Chai将显示有关产品Chai的细节信息。

  请注意,为了在ASP.NET 3.5 SP1中使用ASP.NET路由支持,你需要明确地在你的项目中添加对System.Web.Routing程序集的引用,并需要添加一些标记到Web.config配置文件中。这些步骤在使用ASP.NET 4.0时不再需要,而且,在Global.asax文件中用于定义路由规则的语法更为短小、简单和具有可读性。

转载于:https://www.cnblogs.com/webearly/archive/2010/06/23/EarlyChan.html

ASP.NET 4的Demo实践:URL路由改进支持相关推荐

  1. 精进不休 .NET 4.0 (2) - asp.net 4.0 新特性之url路由

    [索引页] [源码下载] 精进不休 .NET 4.0 (2) - asp.net 4.0 新特性之url路由, 自定义CacheProvider, 新增的表达式<%: expression %& ...

  2. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  3. [ASP.NET MVC2 系列] ASP.NET MVC 之如何创建自定义路由约束

     [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>      ...

  4. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销

    上次实现了用户注册,这次来实现用户登录,用到IAuthenticationManager的SignOut.SignIn方法和基于声明的标识.最后修改用户注册代码实现注册成功后直接登录. 目录: ASP ...

  5. 4. 用MVC实现URL路由

    用MVC实现URL路由 原文:http://quickstarts.asp.net/3-5-extensions/mvc/MvcUrlRouting.aspx 1. 介绍 MVC框架使用URL路由将U ...

  6. asp.net core 3.x Endpoint终结点路由1-基本介绍和使用

    前言 我是从.net 4.5直接跳到.net core 3.x的,感觉asp.net这套东西最初是从4.5中的owin形成的. 目前官方文档重点是讲路由,没有特别说明与传统路由的区别,本篇主要介绍终结 ...

  7. 处理ASP.NET Core中的HTML5客户端路由回退

    在使用由Angular,React,Vue等应用程序框架构建的客户端应用程序时,您总是会处理HTML5客户端路由,它将完全在浏览器中处理到页面和组件的客户端路由.几乎完全在浏览器中... HTML5客 ...

  8. ASP.NET MVC 最佳开发实践(1)

    本文提供了一些代码设计准则,目标是帮助ASP.NET MVC 开发人员创建可靠的应用程序,当然,你可根据实际应用程序选择合适的标准.本文由EntLib.com 小组翻译,欢迎分享和交流ASP.NET ...

  9. MVC中的URL路由(一)

    URL路由系统通过对请求地址进行解析从而得到以目标Controller名称为核心的路由数据.Url路由系统最初是为了实现请求url与物理文件路径分离而建立的,MVC的Url Route是将Url地址与 ...

最新文章

  1. linux终端程序如何编写,[LINUX]利用Ncursesw编写支持中文的终端程序
  2. 推荐8个超实用的神级工具,值得收藏起来!
  3. 基于引擎的matlab+vc混合编程的配置
  4. VIT自适应语音转文本可预测长度和内容(ocr也可)
  5. archlinux php imagemagick,Arch Linux服务器启用Imagemagick PHP扩展
  6. elasticsearch常见错误解决办法
  7. python下的scripts有什么用_python安装后无scripts内文件,无法使用pip
  8. 逆向工程核心原理学习笔记(四):检索API方法2-设置断点
  9. WEB前端 深入了解JavaScript ajax—XHR对象
  10. mysql如何快速插入一千万条数据_如何快速安全的插入千万条数据?
  11. LeetCode 1043. 分隔数组以得到最大和(DP)
  12. 启动go服务_内网穿透工具 FRP公网服务端、内网客户端快速配置文件说明
  13. python中去掉外部引号的函数是_在Python中删除String中的引号
  14. Android程序设计报告总结,Android编程常用技巧实例总结
  15. HTTP协议 通信过程介绍
  16. UWB超宽带定位技术
  17. 通过Adobe Scout深入理解Flash播放器
  18. mysql计算环比增长率
  19. 人艰不拆~找实习之路(二)。
  20. 1.1.32 Histogram 直方图

热门文章

  1. NodeJS起步两三事
  2. 软件测试理论之测试用例设计六把刀
  3. 有关于mfc webbrowser插件的使用
  4. 关于Docker目录挂载的总结(转)
  5. C笔记(2014-12备份)
  6. 【Paddy】数据库监控系列(一) - 监控理念
  7. 河套酒业集团远程应用K/3系统案例解析
  8. 2019年5月12日-linux就该这么学-第6课
  9. 重载运算符作为成员函数还是非成员函数
  10. 大数据会消灭律师这一职业吗?