分享

使用RewritePath方法实现【不同路径 任意URL后缀重写到指定页面且URL地址不变...

 悟静 2012-04-30

还是上篇的需求,用这个方法就简单多了.
【步骤】
①在项目里建一个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 LiuASP.NET 2.0 中的URL 重写技术 ,其实就是它的一个简单版
http://www.cnblogs.com/lgp/archive/2006/10/16/530426.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多