用自定义IHttpModule实现URL重写(转)

UrlReWriter.cs继承IHttpModule接口:

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;
using System.Text.RegularExpressions;

/// <summary>
///UrlReWriter 的摘要说明
/// </summary>
public class UrlReWriter:IHttpModule
{
 public UrlReWriter()
 {
  //
  //TODO: 在此处添加构造函数逻辑
  //
 }

    #region IHttpModule 成员

    public void Dispose()
    {
        //这里写Dispose代码
    }

    public void Init(HttpApplication context)
    {
        //context.BeginRequest是开始处理HTTP管线请求时发生的事件
        context.BeginRequest += new EventHandler(context_BeginRequest);
        //context.Error是当处理过程中发生异常时产生的事件
        context.Error += new EventHandler(context_Error);
    }

    void context_Error(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;
        context.Response.Write("<html>");
        context.Response.Write("<head><title>出错了!</title></head>");
        context.Response.Write("<body style=\"font-size:14px;\">");
        context.Response.Write("出错了:<br />");
        context.Response.Write("<textarea name=\"errormessage\" style=\"width:80%; height:200px; word-break:break-all\">");
        context.Response.Write(HttpUtility.HtmlEncode(context.Server.GetLastError().ToString()));
        context.Response.Write("</textarea>");
        context.Response.Write("</body></html>");
        context.Response.End();
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;
        HttpResponse response = context.Response;
        string path = context.Request.Path;
        string file = System.IO.Path.GetFileName(path);
        //重写后的URL地址
        Regex regex=new Regex("UserInfo(//d+).aspx",RegexOptions.compiled);
        Match match=regex.Match(file);
        //如果满足URL地址重写的条件
        if (match.Success)
        {
            string userId = match.Groups[1].Value;
            string rewritePath = "UserInfo.aspx?UserId=" + userId;
            //将其按照UserInfo.aspx?UserId=123这样的形式重写,确保能正常执行
            context.RewritePath(rewritePath);
        }
      }

    #endregion
}

 web.config 中配置:

<httpModules>
   <add name="UrlReWriter" type="UrlReWriter"/>
  </httpModules>

posted @ 2009-07-15 14:36  94cool  阅读(192)  评论(0)    收藏  举报