通常情况下服务器在处理浏览器端请求的时候都是通过浏览器发送的url路径来处理的,习惯上人们喜欢以“/”来分割url中的信息,比如:http://www.chepinhui.com/UserIndex/yinhuichao,而我们开发人员在开发的时候处理的url地址是这样的:http://www.chepinhui.com/UserIndex.aspx?un=yinhuichao。
所以,为了迎合用户的喜好,并且方便用户记忆url地址,我们开发人员在开发的时候最好使用url重写技术。
还是拿前面那两个url地址来举例子,当用户在浏览器端输入第一个url地址请求的时候,我们服务器需要分析用户的url并且对用户的url进行处理,最后成为第二种url的形式,这样就可以访问到用户想要访问的页面,并且会把参数也一并传递给目的页面。
理解了什么是url重写,那么url重写技术到底怎么实现呢?
下面通过一个简单的例子来介绍url重写的具体用法:
1.首先添加一个名字为“UrlReWriterModule”项目类库。
2.在此类库中添加“System.Web”的引用。
3.添加一个名为“UrlReWriter”类,并实现IHttpModule接口。
4.在HttpApplication管道的BeginRequest 事件中注册方法,在此方法中分析用户的url并对url进行处理,最后返回通过处理后的url(即把请求交给特定的页面路径)。
5.具体代码如下:
class UrlReWrite : IHttpModule
{
public void Init(HttpApplication context)
{
//向请求管道里的第一个事件 BeginRequest 注册方法
context.BeginRequest += BeginRequestChuLi;
}
void BeginRequestChuLi(object sender, EventArgs e)
{
//完成url分析和url重写
//1.获得执行当前页面请求管道的 httpApplication对象
HttpApplication application = sender as HttpApplication;
//2.获得上下文对象
HttpContext context = application.Context;
//3.获得当前请求的url(不包含域名和请求参数)
string urlWithoutPara = context.Request.Url.LocalPath;
//4.分析请求 url
//4.1准备一个正则表达式 WebSite1/UserIndex/yinhuichao
Regex reg = new Regex("/WebSite1/UserIndex/[A-Za-z0-9_]+");
//4.2判断是否满足上面的正则表达式
if (reg.IsMatch(urlWithoutPara))
{
//4.3截取用户名参数 WebSite1/UserIndex?un=yinhuichao
string userName = urlWithoutPara.Substring(urlWithoutPara.LastIndexOf('/') + 1);
//4.4进行重写
context.RewritePath("../UserIndex.aspx?un=" + userName);
}
}
public void Dispose()
{
}
}
6.在要使用url重写的网站中添加上面项目类库的引用。
7.修改网站的配置文件(Web.config):在system.web节点下的httpModules节点下添加子节点:
<add neme=”urlReWriter” type=” UrlReWriterModule.UrlReWriter,UrlReWriterModule”/>
上面就是所谓的url重写的用法了,其使用到的原理就是在httpApplication请求管道中对用户输入的的url请求做相应的处理,最后把用户的请求url交给特定的页面(带上参数)。