首先写一个处理URLs重写的类,并且这个类必须继承IHttpHandler接口,以博客园的程序为例:

public class UrlReWriteModule : System.Web.IHttpModule
{
    public void Init(HttpApplication context)
    {
       context.BeginRequest +=new EventHandler(context_BeginRequest);
    }

public void Dispose()
   {
   }
}

UrlReWriteModule类就是处理URLs重写的类,继承IHttpHandler接口,实现该接口的两个方法,Init和Dispose。在Init方法里注册自己定义的方法,如上例所示:

content.BeginRequest +=new EventHandler(content_BeginRequest);

BeginRequest是一个事件,在收到新的Http请求时触发,content_BeginRequest就是触发时处理的方法。另外说明一点,HttpModules能注册的方法还有很多,如:EndRequest、Error、Disposed、PreSendRequestContent等等。

在content_BeginRequest方法中具体处理URLs重写的细节,比如,将 http://www.cnblogs.com/rrooyy/archive/2004/10/24/56041.html 重写为 http://www.cnblogs.com/archive.aspx?user=rrooyy&id=56041 (注:我没有仔细看DuDu的程序,这里只是举例而已)。然后将重新生成的Url用HttpContext.RewritePath()方法重写即可,如下:

private void context_BeginRequest(object sender, EventArgs e)
{
    HttpContext context  = ((HttpApplication)sender).Context;
    // 获取旧的Url
    string url = context.Request.Path.ToLower();
    // 重新生成新的Url
    string newUrl = ...; // 具体过程略
    // 重写Url
    context.RewritePath(newUrl);
}

提醒:newUrl的格式不是http://www.infotouch.com/user/archive.aspx,而是从当前应用程序根目录算起的绝对路径,如:user\archive.aspx,这一点请特别注意。

最后要web.config中注册重写URLs的类,格式如下:

<HTTPMODULES>
   <ADD type="classname,assemblyname" name="modulename"/>
   <REMOVE name="modulename"/>
   <CLEAR />
</HTTPMODULES>

采用<ADD>标签可以注册一个类;<REMOVE>可以移除某个类,如果某个子目录不希望继承父目录的某个Http Module注册,就需要使用这个标签;<CLEAR />可以移除所有的Http Module注册。

转载于:https://www.cnblogs.com/yzxchoice/archive/2006/08/07/469717.html

采用HttpModules来重写URLs(实践篇)相关推荐

  1. 采用HttpModules来重写URLS

    首先写一个处理URLs重写的类,并且这个类必须继承IHttpHandler接口,以博客园的程序为例: public class UrlReWriteModule : System.Web.IHttpM ...

  2. 采用HttpModules来重写URLs(原理篇)转

    据说通过HttpModules可以将类似于:http://www.infotouch.cn/detail.aspx?id=120 的URL地址重写为:http://www.infotouch.cn/d ...

  3. java中重载与重写的区别

    最近了解一下重载和重写  一.重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading ...

  4. java中的重载和重写

    1.重载:可以在同一个类中存在多个函数,函数名称相同但参数列表(参数个数,参数类型,参数顺序)不同, 不能通过方法返回值类型,访问权限以及抛出异常来定义重载. 2.重写: "重写(覆盖)&q ...

  5. Java基础学习总结(11)——重载与重写

    2019独角兽企业重金招聘Python工程师标准>>> 首先我们来讲讲:重载(Overloading) 一.方法的重载 方法名一样,但参数不一样,这就是重载(overload). 所 ...

  6. asp.net url 重写解决方案

    大家都知道很多网站特别是大型网站现在都用了url伪静态重写来实现用户的易用性和美观性,比如这个网站 http://www.xintaifcw.com 很明显采用了url重写,里面的所有文章内容都是用了 ...

  7. 【Java基础】重写与重载

    为什么80%的码农都做不了架构师?>>>    重写(Override): 定义:在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类 ...

  8. python中函数重载和重写

    python 中的重载 在python中,具有重载的思想却没有重载的概念.所以有的人说python这么语言并不支持函数重载,有的人说python具有重载功能.实际上python编程中具有重载的目的缺无 ...

  9. java重载与重写的区别+重写父类equals方法的完美实现

    [0]README 0.1) 本文章节[1]和[2]的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html : 旨 ...

最新文章

  1. 未来科学家数学与计算机奖,未来科学大奖“对话未来科学家”
  2. apache 定义日志格式 及日志记录
  3. PHP 如何在Redis中实现事物(事物提交和事物回滚)
  4. mysql修改文件名_SQL语句实现附加数据库,可以改数据库物理文件名
  5. 被高中生物骗了这么多年,原来人体内细胞的DNA是有不同的?
  6. mysql 小写null 大写null_mysql中的null字段值的处理及大小写问题
  7. 【Vue2.0】—props 配置(十三)
  8. linux脚本批量解压,Shell中使用tar命令批量解压缩的实现方法
  9. python使用lxml库对解析后的DOM树形成的xpath计算得到平均值、中位数、方差
  10. centos7修改mysql默认端口号_修改mysql默认端口方法(linux centos 7)
  11. ImageAI的介绍(2)
  12. C语言:由键盘任意输入1个整形数据(小于10亿,位数不限),将其倒置,如:输入12345,则输出54321。
  13. 计算机无法识别移动硬盘怎么办,电脑识别不出来移动硬盘怎么办
  14. CentOS系统磁盘的分区格式化和挂载操作
  15. springCloud sentinel 流量卫兵
  16. 在线TSV转JSON工具
  17. 第1讲、Cadence Allergo绘制小马哥DragonFly四轴飞行器PCB四层板教程简介
  18. iscsi 挂载教程_ubuntu iscsi 安装以及挂载SAN资源步骤
  19. 尝试新增特殊分辨率(800x480)HDMI屏到RK3328(记录)
  20. 《评标专家和评标专家库管理暂行办法》(发改委第29号 )

热门文章

  1. ELF 文件 动态链接 - 地址无关代码(GOT)
  2. php面向对象中的魔术方法中文说明
  3. JavaScript原型学习
  4. MSSQL · 最佳实践 · 使用混合密钥实现列加密
  5. SQL*Loader 笔记 (一) 热身练习
  6. 使用Django1.11创建简单的资产管理平台
  7. atitit.js浏览器环境下的全局异常捕获
  8. c# 使用Autodesk design Review API
  9. 怎样一步一步删除(linux amp; UNIX)环境下 oracle 11g 集群节点
  10. 【HeadFirst 设计模式总结】1.策略模式