还是上篇的需求,用这个方法就简单多了.
【步骤】
①在项目里建一个Test目录,再Test目录下建一个页面:AX.aspx
②在Global.asax.cs里添加Application_BeginRequest()方法的内容
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string originalurl, newurl;
originalurl = Request.Url.PathAndQuery;

//获取页面名称且不包括扩展名
newurl=originalurl.Substring(originalurl.LastIndexOf('/'),originalurl.LastIndexOf('.')-originalurl.LastIndexOf('/')+1);
newurl="~/Test"+newurl+"aspx";

/**//*这句是精华
【~/】表示网站根目录
真的很奇怪,以前表示根目录不用【~】就可以的,
但这里执行下面这句话会报错:
虚拟路径“/Test/AX.aspx”映射到另一个应用程序,这是不允许的。*/
HttpContext.Current.RewritePath(newurl);
}
③在IIS上注册.ax后缀.具体见上篇的⑤
④配置该项目的网站(具体见我前面的帖子),我机子上的本例网站名:www.
⑤测试,输入以下网址
http://www./AX.ax
http://www./AX.aspx
http://www./sadfsa/sdf/AX.ax
http://www./sad/fsa/sdf/AX.aspx
实际路径
:http://www./Test/AX.aspx
测试通过,OK,Very Good!
【扩展】
ⅰ可通过正则表达式实现不同规则的URL重写
ⅱ可以使用该方法的重载方法,实现带参数的扩展
C# |
public RewritePath (
filePath,
pathInfo,
queryString
) |
参数
- filePath 内部重写路径。
- pathInfo 资源的附加路径信息。
- queryString 请求查询字符串。
ⅲ本来想用该方法实现页面间跳转,结果失败了,出现错误:
无法验证数据。
但我看MSDN上有页面跳转的部分代码,不知道它怎么弄的.
【总结】
这个属于简单实用的快餐,方法本身实现页面跳转,且地址栏的URL不变,而上篇使用IHttpHandler则有些接近底层,对我们深入了解ASP.NET有好处,也可以实现更强大的功能.
【附】本文参考了Henry Liu的ASP.NET 2.0 中的URL 重写技术 ,其实就是它的一个简单版
http://www.cnblogs.com/lgp/archive/2006/10/16/530426.html