1、Global.asax:也是最简单的。在Global.asax.cs中有个protected void Application_BeginRequest(Object sender, EventArgs e)函数,
用正则取得用户请求URL中的“自定义”请求参数。而后用重定向
例子:
void Application_BeginRequest(Object sender, EventArgs e)
{
String oldUrl = System.Web.HttpContext.Current.Request.RawUrl;
String pattern = @"^(.+)/test4/(d+).aspx/(w+)";
String replace =@"~/test4.aspx?NID=$1&id=$2&uid=$3";
if(Regex.IsMatch(oldUrl,pattern,RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
String newUrl=Regex.Replace(oldUrl,pattern,replace,RegexOptions.Compiled| RegexOptions.IgnoreCase);
Context.RewritePath(newUrl);
}
}
2、HttpModules 实现:
这个实现和1的原理是一样的。
我做了个项目例子,给代码太乱,自己去下吧:下载地址
3、HttpHandler 实现:
这个不是真正的Urlrewrite ,其实是把请求截获后,直接用自己的handler工厂类定向到自己的page类,所以这个方式可以实现没有.aspx文件
用.aspx文件其实是微软给的handler工厂类实现的,现在我们自己写这个工厂类。可以想像如果你的站没有.aspx文件,那什么扩展名都无所谓了,主要保证你的请求是被.net 来执行的就行
我也写了个例子,很简单的,自己去下啦:下载地址
发现都有不足之处,希望和大家讨论讨论



博客
资料
短消息
搜索
加为好友
成为Fans
浙江

河北
