using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Text.RegularExpressions;
namespace HY.Service.Security
{
/// <summary>
/// by fangle
/// IHttpModule触发HttpApplication中的次序如下
/// ... -> PostResolveRequestCache -> Error -> PostMapRequestHandler -> AcquireRequestState -> ...
/// Session直到AcquireRequestState才会出现
/// 如文件不存在会在Error中停止
/// 故通过在Error中忽然错误就可以继续下去了(调用Server.ClearError())
/// </summary>
public class UrlRewrite : IHttpModule
{
public void Init(HttpApplication context)
{
context.Error += new EventHandler(context_Error);
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
void context_Error(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
string path = context.Request.Path;
if (path.IndexOf(".aspx") != -1)
{
Regex re = new Regex(@"^/ProcessWeb/([_0-9a-zA-Z-\.]+).aspx");
if (re.IsMatch(path))
{
context.Server.ClearError();//<--------------
}
}
}
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
Object loginUser = context.Session["LoginUser"];//<--------------
if (loginUser == null)
{
context.Response.Redirect("/Login.aspx");
}
string path = context.Request.Path;
if (path.IndexOf(".aspx") != -1)
{
Regex re = new Regex(@"^/ProcessWeb/([_0-9a-zA-Z-\.]+).aspx");
if (re.IsMatch(path))
{
context.Server.Transfer(re.Replace(path, "/ProcessWeb.aspx?form=$1"));//<--------------
}
}
}
public void Dispose()
{
//throw new NotImplementedException();
}
}
}
C# 通过IHttpModule来实现Url Rewrite,且Session有效
最新推荐文章于 2024-06-05 10:37:10 发布