欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

如何通过RewritePath方法重写Url地址实现伪静态

创建时间:2011年08月02日 23:25  阅读次数:(9611)
分享到:
各位在浏览本站时如果细心一些,就会发现本站的Url地址全都是目录式的,也就是像我的电脑中文件夹式的目录结构,地址中不包含文件名。以前在网上也看到有人问到这种目录式Url的实现方法,本站是通过重写Url地址来实现的,本章就说说小站的实现方法,当然,实现该功能的方法多种多样,不仅仅限于小站以下要说的方法。

1,首先新建一个类库项目,将自动生成的Class1文件删掉,自己创建一个HttpModule.cs类。

2,修改代码,使HttpModule.cs类继承自IHttpModule接口,继承该接口必须实现
void Dispose();
void Init(HttpApplication context);
两个方法,Dispose方法我们可不用管它,我们仅需要在Init方法中实现HttpApplication的BeginRequest事件即可,代码如下:
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

context_BeginRequest事件如下:
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
string path = context.Request.Path;
//以上这句代码是实现客户端请求的虚拟路径,如本站中的某链接的地址为http://www.lmwlove.com/ab/CatalogID1,那么当浏览器者点击该链接的时候,context.Request.Path的值就是http://www.lmwlove.com/ab/CatalogID1了。
获取到该值后,就可以根据自己定义的规则来进行Url重写了。比如本站中的ab代表tec/tec_article.aspx文件,那么就可以根据path中是否包含ab来进行重写了。
如下代码:
if (path.Contains("ab"))
{
context.RewritePath("tec/tec_article.aspx")
}
}

全都代码如下:
using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;

namespace MyHttpModule
{
    public class UrlReWriter : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;
            string path = context.Request.Path;

         if (path.Contains("ab"))
  {
context.RewritePath("tec/tec_article.aspx")
  }
        }

        public void Dispose()
        {
        }
    }
}

就是这样简单,第二步就算完成了。

3,编译HttpModule.cs,将dll文件复制到网站的bin文件夹下。

4,配制web.config文件
在web.config文件的system.web节下配制
    <httpModules >
      <add name="UrlReWriter" type="MyHttpModule.UrlReWriter,MyHttpModule" / >
    </httpModules >

其中type中的MyHttpModule.UrlReWriter为UrlReWriter.cs的命名空间,MyHttpModule为编译后dll文件名。

注:我在本机调试时是用以上配制,通过OK,但上传到租用空间后报错。将配制文件改为
  <system.webServer >
    <modules  >
      <add name="UrlReWriter" type="MyHttpModule.UrlReWriter,MyHttpModule" / >
    </modules >
  </system.webServer >

就OK了。

重写后会引发另一个问题,就是当页面回发时,页面会定向到原始地址,解决方法请参见本站:RewritePath重写Url后回发会定向到原始地址的解决方案
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:路人  评论时间:2013-7-31 15:07:21
发表评论:
留言人:
内  容:
请输入问题 19+84=? 的结果(结果是:103)
结  果: