自定义实现URL重写 04.18
自定义实现URL重写 04.18
1、定义XML规则,配置好URL节点
?xml version="1.0" encoding="utf-8" ?>
< urls >
< rewrite name ="ShowNews" pattern ="news-(\d+).html"
page ="news.aspx" query ="id=$1" >
</ rewrite >
</ urls >
2、对XML的解析,对其进行封装
public class MyUrlRewrite
{
public string Name { get ; set ; }
public string Pattern { get ; set ; }
public string Page { get ; set ; }
public string Query { get ; set ; }
}
public class UrlList
{
private static UrlList instance;
public List<MyUrlRewrite> GetAllUrls
{
get ;
set ;
}
private UrlList()
{
GetAllUrls = new List<MyUrlRewrite> ();
XmlDocument xmlDoc = new XmlDocument();
string xmlPath = HttpContext.Current.Request.PhysicalApplicationPath + " /UrlLink.config " ;
xmlDoc.Load(xmlPath);
XmlNode node = xmlDoc.SelectSingleNode( " urls " );
foreach (XmlNode item in node.ChildNodes)
{
XmlAttribute name = item.Attributes[ " name " ];
XmlAttribute pattern = item.Attributes[ " pattern " ];
XmlAttribute page = item.Attributes[ " page " ];
XmlAttribute query = item.Attributes[ " query " ];
if (name == null || pattern == null || query == null || pattern == null )
continue ;
MyUrlRewrite model = new MyUrlRewrite();
model.Name = name.Value;
model.Pattern = pattern.Value;
model.Page = page.Value;
model.Query = query.Value;
GetAllUrls.Add(model);
}
}
public static UrlList GetUrlList()
{
if (instance == null )
{
instance = new UrlList();
}
return instance;
}
}
3、自定义IHttpModule接口实现URL重写【关于此接口的介绍不做多讲,网上有很多】
/* *
* 向实现类提供模块初始化和事件处理
*
*/
public class MyHttpModule : System.Web.IHttpModule
{
#region IHttpModule 成员
// 处置由实现 IHttpModule 的模块使用的资源(内存除外)。
public void Dispose()
{
throw new NotImplementedException();
}
// 初始化模块,并使其为处理请求做好准备。
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest( object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
string requestPath = context.Request.Path.ToLower();
foreach (MyUrlRewrite item in UrlList.GetUrlList().GetAllUrls)
{
// 不区分大小 写
if (Regex.IsMatch(requestPath, item.Pattern, RegexOptions.IgnoreCase))
{
string newUrl = Regex.Replace(requestPath, item.Pattern, item.Query);
if (newUrl.Length == 0 )
context.RewritePath(item.Page);
else
context.RewritePath(item.Page + " ? " + newUrl.Substring( 1 ));
}
}
}
#endregion
}
4、在web.config进行相应的配置
< httpModules >
< add name ="urlrewrite" type ="_017_URL重写.MyHttpModule,017_URL重写" />
</ httpModules >
5、最终的效果图
小结:
1、了解asp.net的管道和生命周期很重要
2、将程序可配置化,避免总是修改demo,采用xml定义规则
3、最重要的是:湖人进入季后赛了,但科比受伤了。
分类: C# , 每日代码秀 , 设计模式
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于自定义实现URL重写 04.18的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did46094