2007-07-06

asp.net 2.0中的URL重写以及urlMappings问题(1)

来源: 本站收集整理 作者:佚名 评论 0 条
  在asp.net2.0中的urlMappings倒是非常好用,可惜暂不支持正则表达式,不过,好在假如用IHttpModule的话

不管什么样的请求都会先经过IHttpModule这样就为URL重写提供了一个好机会:

下面是我写的一个IHttpModule:

using System;
using System.Web;

public class ReWriteModule:IHttpModule
{
public ReWriteModule()
{
}
public override string ToString()
{
return this.GetType().ToString();
}


void IHttpModule.Dispose()
{

}
private static System.Xml.XmlDocument ruleDoc = null;
private static System.Xml.XmlDocument GetRuleConfig(System.Web.HttpContext app)
{
if (ruleDoc == null)
{
ruleDoc = new System.Xml.XmlDocument();
ruleDoc.Load(app.Server.MapPath("~/rule.xml"));
}
return ruleDoc;
}
public static string GetUrl(System.Web.HttpContext cxt,string path)
{

System.Xml.XmlDocument doc = GetRuleConfig(cxt);
System.Xml.XmlNodeList lst= doc.GetElementsByTagName("RewriterRule");
string pat="";
foreach (System.Xml.XmlNode nd in lst)
{
System.Xml.XmlNodeList sub = nd.ChildNodes[0].ChildNodes;
foreach(System.Xml.XmlNode chk in sub)
{
pat = "^" chk.InnerText "$";
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pat, System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase);
if(reg.IsMatch(path))
{
return reg.Replace(path, nd.ChildNodes[1].InnerText);
}
}
}
return null;

}
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest = delegate(object sender, EventArgs e)
{


System.Web.HttpContext cxt = context.Context;

if (cxt.Request.ContentType != "image/pjpeg")
{
string type = cxt.Request.ContentType.ToLower();
string path = cxt.Request.Path;
string apppath = cxt.Request.ApplicationPath;
path = path.Remove(0, apppath.Length);
path = "~" path;

string newUrl = GetUrl(cxt, path.TrimEnd().TrimStart());
if (newUrl != null)
{
cxt.Response.Filter = new ResponseFilter(cxt.Response.Filter,cxt.Request.Path);
cxt.Response.Write("请求的路径:" path);
cxt.Response.Write("<BR>");
cxt.Response.Write("转向的目的URL:" newUrl);
cxt.Response.Write("<BR>");
cxt.RewritePath(newUrl);



}//假如要求处理所有的请求时用到
//else
//{
// cxt.Response.Write(cxt.Request.Path "<BR>");
共2页: 上一页 1 [2] 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:入门教程:XSLT Designer快速指南  
下一篇:asp.net 2.0中的URL重写以及urlMappings问题(2)
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号