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

还是上篇的需求,用这个方法就简单多了.
【步骤】
①在项目里建一个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.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 
        
          
           
         void
        
           RewritePath (

            
        
          
           
         string
        
           filePath,

            
        
          
           
         string
        
           pathInfo,

            
        
          
           
         string
        
           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

你可能感兴趣的:(rewrite)