使用RewritePath方法实现【不同路径+任意URL后缀重写到指定页面且URL地址不变】(附源码)_AX...

还是上篇的需求,用这个方法就简单多了.
【步骤】
①在项目里建一个Test目录,再Test目录下建一个页面:AX.aspx
②在Global.asax.cs里添加Application_BeginRequest()方法的内容

None.gif          protected   void  Application_BeginRequest(Object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
string originalurl, newurl;            
InBlock.gif            originalurl 
= Request.Url.PathAndQuery;            
InBlock.gif
InBlock.gif            
//获取页面名称且不包括扩展名
InBlock.gif
            newurl=originalurl.Substring(originalurl.LastIndexOf('/'),originalurl.LastIndexOf('.')-originalurl.LastIndexOf('/')+1);
InBlock.gif            newurl
="~/Test"+newurl+"aspx";            
ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//*这句是精华    
InBlock.gif            【~/】表示网站根目录
InBlock.gif            真的很奇怪,以前表示根目录不用【~】就可以的,
InBlock.gif            但这里执行下面这句话会报错:
ExpandedSubBlockEnd.gif            虚拟路径“/Test/AX.aspx”映射到另一个应用程序,这是不允许的。
*/

InBlock.gif    
InBlock.gif            HttpContext.Current.RewritePath(newurl);            
ExpandedBlockEnd.gif        }


在IIS上注册.ax后缀.具体见上篇的⑤
④配置该项目的网站(具体见我前面的帖子),我机子上的本例网站名:www.rewritepath.com
⑤测试,输入以下网址
http://www.rewritepath.com/AX.ax
http://www.rewritepath.com/AX.aspx
http://www.rewritepath.com/sadfsa/sdf/AX.ax
http://www.rewritepath.com/sad/fsa/sdf/AX.aspx
实际路径
:http://www.rewritepath.com/Test/AX.aspx
测试通过,OK,Very Good!

【扩展】
ⅰ可通过正则表达式实现不同规则的URL重写

ⅱ可以使用该方法的重载方法,实现带参数的扩展

C#
public RewritePath (
            filePath,
            pathInfo,
            queryString
            )

参数
filePath         内部重写路径。 pathInfo       资源的附加路径信息。 queryString   请求查询字符串。

 ⅲ本来想用该方法实现页面间跳转,结果失败了,出现错误:
无法验证数据。
但我看MSDN上有页面跳转的部分代码,不知道它怎么弄的.

【总结】
这个属于简单实用的快餐,方法本身实现页面跳转,且地址栏的URL不变,而上篇使用IHttpHandler则有些接近底层,对我们深入了解ASP.NET有好处,也可以实现更强大的功能.

【附】本文参考了Henry LiuASP.NET 2.0 中的URL 重写技术 ,其实就是它的一个简单版
URL:http://www.cnblogs.com/lgp/archive/2006/10/16/530426.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值