惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
V2EX - 技术
V2EX - 技术
F
Full Disclosure
P
Privacy & Cybersecurity Law Blog
The GitHub Blog
The GitHub Blog
P
Palo Alto Networks Blog
T
Threat Research - Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Latest news
Latest news
Y
Y Combinator Blog
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tor Project blog
B
Blog RSS Feed
S
Schneier on Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
小众软件
小众软件
博客园 - Franky
T
The Exploit Database - CXSecurity.com
V
V2EX
V
Vulnerabilities – Threatpost
Know Your Adversary
Know Your Adversary
C
Check Point Blog
L
LINUX DO - 热门话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
S
Securelist
U
Unit 42
博客园 - 叶小钗
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 三生石上(FineUI控件)
C
Cyber Attacks, Cyber Crime and Cyber Security
G
GRAHAM CLULEY
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
量子位
Hacker News - Newest:
Hacker News - Newest: "LLM"
NISL@THU
NISL@THU
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threatpost
N
News | PayPal Newsroom
L
LangChain Blog
宝玉的分享
宝玉的分享
C
CXSECURITY Database RSS Feed - CXSecurity.com
爱范儿
爱范儿

博客园 - 良村

元数据驱动开发 - 面向对象编程思想的补充 用ANTLR实现表达式词法和语法分析器 我的开源项目分享-基于SharpBrowser二次开发的定制浏览器,过程中填坑无数 AI是什么 现阶段AI编程无法取代程序员 用zrender实现工作流图形化设计(附范例代码) 特殊字符
导致的Javascript脚本异常 不同寻常的浏览器请求无响应错误 进销存管理中对红冲处理的误区 进销存管理中负库存产生的原因以及对应措施 打造自己的Html文本编辑控件 探讨对Web控件的异常处理 看了一篇不错的文章 - 使用 UTF-8 对 XML 文档进行编码 Ajax学习笔记(2) - 一定要用XML吗? Ajax 学习笔记(1) ASP.NET控件编写日记-当心“用过的控件”! ASP.NET控件编写心得总结- 以后会写详细一点 CodeDom.CodeArrayCreateExpression不能生成多维数组的创建表达式 用NAnt编译带有资源文件(*.resx,*.bmp,*.gif等)的C#项目 网址收藏 C#实现Singleton的两种方法的比较 发现Maxthon(myIE2)浏览器处理javascript脚本时的奇怪现象 - 良村 - 博客园 页面缓冲与Asp.Net的性能优化(设置Page.Buffer属性) 如何使用AdminScripts脚本创建虚拟目录
采用HttpModules来重写URLs(实践篇)
良村 · 2004-10-26 · via 博客园 - 良村

首先写一个处理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注册。