用自定义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 @   94cool  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2009年7月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示