1).通过 HttpContext 类的 RewriteUrl() 方法来执行 URL 重写;

2).通过自定义HTTP Module或 HTTP Handler来重写 URL;

3).借助正则表达式来重写URL:

理解重写的方式:

创建自定义 HTTP 模块和 HTTP 处理程序是相对简单的任务,包括创建实现正确接口的托管类。HTTP 模块必须实现 System.Web.IHttpModule 接口,而 HTTP 处理程序和 HTTP 处理程序工厂必须分别实现 System.Web.IHttpHandler 接口和 System.Web.IHttpHandlerFactory 接口。创建 HTTP 处理程序和 HTTP 模块的细节超出了本文的范围。要获得详细的背景知识,请阅读 Mansoor Ahmed Siddiqui 的文章 HTTP Handlers and HTTP Modules in ASP.NET。

创建了自定义 HTTP 模块或 HTTP 处理程序之后,必须将其注册到 Web 应用程序。为整个 Web 服务器注册 HTTP 模块和 HTTP 处理程序仅需在 machine.config 文件中进行简单的添加即可;而为特定 Web 应用程序注册 HTTP 模块或 HTTP 处理程序包括向应用程序的 Web.config 文件中添加几行 XML。

特别要说明的是,要将 HTTP 模块添加到 Web 应用程序,应在 Web.config 的 configuration/system.web 部分添加以下几行:

<httpModules>   <add type="type" name="name" /></httpModules>

type 值提供了 HTTP 模块的程序集和类名称,而 name 值提供了友好名称,可以在 Global.asax 文件中使用此友好名称来引用 HTTP 模块。

Web.config 的 configuration/system.web 部分中的 <httpHandlers> 标记对 HTTP 处理程序和 HTTP 处理程序工厂进行了配置,如下所示:

<httpHandlers>   <add verb="verb" path="path" type="type" /></httpHandlers>

如上所述,对于每个传入请求,ASP.NET 引擎将确定应使用哪个 HTTP 处理程序来呈现请求。此决定是基于传入请求的动词和路径做出的。动词将指定所作出的 HTTP 请求的类型(GET 或 POST),而路径将指定被请求文件的位置和文件名。因此,如果我们希望 HTTP 处理程序处理对扩展名为 .scott 的文件的所有请求(GET 或 POST),可以在 Web.config 文件中添加下面几行:

<httpHandlers>   <add verb="*" path="*.scott" type="type" /></httpHandlers>

其中,type 是 HTTP 处理程序的类型。

注意:注册 HTTP 处理程序时,应确保 HTTP 处理程序使用的扩展名已从 IIS 映射到 ASP.NET 引擎,这一点非常重要。也就是说,在本 .scott 示例中,如果 .scott 扩展名没有从 IIS 映射到 aspnet_isapi.dll ISAPI 扩展,则对文件 foo.scott 的请求将导致 IIS 试图返回文件 foo.scott 的内容。为了使 HTTP 处理程序可以处理此请求,必须将 .scott 扩展名映射到 ASP.NET 引擎。然后,ASP.NET 引擎将把请求正确地路由到相应的 HTTP 处理程序。

有关注册 HTTP 模块和 HTTP 处理程序的详细信息,请务必参考 <httpModules> element documentation 和 <httpHandlers> element documentation。

通过 System.Web.HttpContext 类的 RewritePath() 方法,可以在 ASP.NET 级别实现 URL 重写。HttpContext 类包含有关特定 HTTP 请求的 HTTP 特定信息。对于 ASP.NET 引擎收到的每个请求,均为该请求创建一个 HttpContext 实例。此类具有如下属性:RequestResponse,提供对传入请求和传出响应的访问;ApplicationSession,提供对应用程序和会话变量的访问;User,提供有关通过了身份验证的用户的信息;其他相关属性。

使用 Microsoft® .NET Framework Version 1.0,RewritePath() 方法可以接受单个字符串作为要使用的新路径。HttpContext 类的 RewritePath(string) 方法在内部对 Request 对象的 Path 属性和 QueryString 属性进行更新。除了 RewritePath(string),.NET Framework 1.1 还包括另一种形式的 RewritePath() 方法,此方法可以接受三个字符串输入参数。此备用重载形式不仅要设置 Request 对象的 Path 属性和 QueryString 属性,还要设置内部成员变量,这些变量用于计算 Request 对象的 PhysicalPathPathInfoFilePath 属性值。

要在 ASP.NET 中实现 URL 重写,需要创建 HTTP 模块或 HTTP 处理程序,以便完成以下操作:

  1. 检查被请求的路径,以确定 URL 是否需要重写。

  2. 如果需要重写,通过调用 RewritePath() 方法来重写路径。

例如,假设我们的网站中包含每个员工通过 /info/employee.aspx?empID=employeeID 均可访问的信息。为了使 URL 可以更多地被“删节”,我们可以决定通过以下地址来访问员工页面:/people/EmployeeName.aspx。这就是我们要使用 URL 重写的一个例子。也就是说,在请求 /people/ScottMitchell.aspx 页面时,我们要重写该 URL,以便使用 /info/employee.aspx?empID=1001 页面。

使用 HTTP 模块执行 URL 重写

在 ASP.NET 级别执行 URL 重写时,可以使用 HTTP 模块或 HTTP 处理程序来执行重写。使用 HTTP 模块时,必须决定在请求有效期内的哪个时间点上来检查 URL 是否需要重写。乍一看,这似乎可以任意选择,但决定会以一种明显而微妙的方式对应用程序产生影响。由于内置 ASP.NET HTTP 模块使用 Request 对象的属性执行任务,因此选择在何处执行重写非常重要。(如上所述,重写路径将改变 Request 对象的属性值。

http://hi.baidu.com/ping_li/blog/item/a9174db7091fbef230add13f.html

URL重写有几种方式相关推荐

  1. php解析url并得到url中的参数及获取url参数的四种方式

    本文给大家介绍php解析url并得到url中的参数及获取url参数的四种方式,涉及到将字符串参数变为数组,将参数变为字符串的相关知识,本文代码简单易懂,感兴趣的朋友一起看看吧 下面一段代码是php解析 ...

  2. url去重的几种方式

    一.url去重的几种方式 1.使用 Java 的 Set 集合判重 Set 集合天生具备不可重复性,使用它只能存储值不相同的元素,如果值相同添加就会失败,因此我们可以通过添加 Set 集合时的结果来判 ...

  3. url 参数传递的两种方式_Java项目实践,支付功能实现方式,第三方支付与银行接口支付...

    1.第三方支付 B2C电商的支付,一般由于支付金额比较小,支付比较频繁,所以一般采用第三方支付,常用的第三方支付有:支付宝.微信等. 他们的原理都差不多,都是在点击支付时,直接调用第三方支付接口,传入 ...

  4. php获取url传递的参数,php解析url并得到url中的参数及获取url参数的四种方式

    下面一段代码是php解析url并得到url中的参数,代码如下所示:<?php $url = "http://www.baidu.com/index.php?m=content& ...

  5. yy神曲url解析php_php解析url并得到url中的参数及获取url参数的四种方式

    下面一段代码是php解析url并得到url中的参数,代码如下所示: $url = 'http://www.baidu.com/index.php?m=content&c=index&a ...

  6. java使用url和tns两种方式连接数据库执行存储过程

    1.url方式(连接数据库并执行一个查询): public static void main(String[] args) throws ClassNotFoundException, SQLExce ...

  7. url 参数传递的两种方式_VB编程中的传值与传址两种参数传递方式,你清楚吗?...

    Tips:欢迎公众号设置为星标,VB技术干货文章可以第一时间看到.如您在学习VB过程中有独特的见解或者想法,欢迎投稿,可在公众号文章下直接留言. 推荐阅读 1. VB编程语言基础知识点总结 2. VB ...

  8. nginx url转发的一种方式

    比如,以前是 http://vampire.com/elasticsearch 现在要转到http://vampire.com/search 配置如下: upstream localhost {ser ...

  9. URL重写及Session

    先粘=一段: Session对象:是用来分别保存每一个用户信息的对象,以便于跟踪用户的操作状态: Session的信息保存在服务端 Session的ID保存在客户机的Cookie中. 事实上,在许多服 ...

最新文章

  1. 又被 AI 抢饭碗?2457 亿参数规模,全球最大中文人工智能巨量模型 “源1.0”正式开源...
  2. Java线程:新特征-条件变量(转)
  3. SpringBatch读文件(FlatFileItemReader)写据库(MyBatisBatchItemWriter)(四)
  4. 怎么看rx580是不是470刷的_怎么看钻石是不是奶咖钻,钻石证书上可以看出奶咖钻石吗...
  5. android ColorDrawable的使用
  6. 保证全对——2015年第六届蓝桥杯C/C++ B组部分解题报告
  7. STL 容器和迭代器连载6_顺序容器的操作3
  8. C#中的DES加解密方法
  9. eBPF and IO Visor: The what, how, and what next!
  10. Akka适用于分布式系统《five》译
  11. 智能时代 什么样的家庭安防系统更靠谱?
  12. 导入web项目运行报错找不到包
  13. 泛型列表(List)的搜索和排序
  14. Mean Shift 聚类算法
  15. 手把手教你从AVI转RMVB的压制全程(转)
  16. 公司企业邮箱开通使用,收不到邮件怎么办?
  17. Python采集《惊奇先生》, 下载你想看的高质量漫画
  18. PE格式之DOS头+PE头
  19. 养成不断学习的好习惯_如何使用“小习惯”养成一致的学习习惯。
  20. Linux Graphics 周刊(第 9 期)

热门文章

  1. 目标Zookeeper未授权访问(漏洞验证)
  2. 检测浏览器是否接受Cookies(Downmoon)?
  3. RobotStudio软件及ABB机器人相关问题
  4. 解决python错误:utf-8 codec can't decode byte 0xbb in position3:invalid start byte
  5. 快速打点工具——Aopo工具
  6. linux自动启动 oracle
  7. 网站QQ扫码登录代码及详细说明
  8. WinRAR(去广告)中文繁体
  9. Spring Cloud(十一):Hystrix服务熔断-工作流程
  10. FIPS 140-3与140-2的差异-1