首 页 | 精品电影 | 音乐天堂 | 在线游戏 | Flash MTV | 三湘书屋 | 幽默笑话 | 三湘图库 | 美女写真 | IT知识库 | QQ贴图 | 加入书签

网页制作网络编程图形图象操作系统冲浪宝典软件教学网络安全认证考试通信技术电子商务业内动态书籍教程原码

最近更新 文章分类 多媒体类 精品软件

本站搜索:
您的位置:三湘时空 -> IT知识库 -> 文章分类 -> ASP.NET技巧 -> Url Rewriting with Regex for ASP.NET 2.0(在asp.net2.0中使用正规表达式建立URL重写)
Url Rewriting with Regex for ASP.NET 2.0(在asp.net2.0中使用正规表达式建立URL重写)


文章类别:ASP.NET技巧 来源: 作者: 发表日期:2006-4-28 字体:[ ]

小游戏 | 在线影院 | 幽默笑话 | 源码下载 | Flash MTV | 音乐试听 | 书屋 | 美女写真

A new feature in Asp.Net 2.0 is it's built-in url rewriting support. When i looked into this new feature i found out it lacked regular expressions support, wich is really the point of an Url Mapper. ScottGlu at his blog, explains the reason why the Asp.Net team didn't implemented this feature. Basically they realized that a full featured version would want to take advantage of the next IIS 7.0 new features, specially the support for all content-types (images and directories).

Anyway, it's really simple to implement a Url Rewriting Module with Regex support in Asp.Net. I wrote a quick and simple HttpModule for this. The whole magic is done within a few lines within the HttpModule:

 1 public void Rewrite_BeginRequest(object sender, System.EventArgs args) {
 2      string strPath = HttpContext.Current.Request.Url.AbsolutePath;
 3      UrlRedirection oPR = new UrlRedirection();
 4      string strURL = strPath;
 5      string strRewrite = oPR.GetMatchingRewrite(strPath);
 6       if (!String.IsNullOrEmpty(strRewrite)) {
 7           strURL = strRewrite;
 8      } else {
 9           strURL = strPath;
10      }
11      HttpContext.Current.RewritePath("~" + strURL);
12 }
The code is self explanatory. When a request that is processed by the Asp.Net engine, the module checks an xml for a regex match. I've seen many Url Rewriting engines that uses Web.config to store the matching rules but i prefer using an additional xml file. The rewriting rules file look like the following:

 1 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 2 <urlrewrites>
 3      <rule name="Category Page">
 4           <url>/([a-zA-Z][\w-]{1,149})\.aspx</url>
 5           <rewrite>/Default.aspx?Category=$1</rewrite>
 6      </rule>
 7      <rule name="Item Page">
 8           <url>/([a-zA-Z][\w-]{1,149})/([a-zA-Z][\w-]{1,149})\.aspx</url>
 9           <rewrite>/Default.aspx?Category=$1&amp;Item=$2</rewrite>
10      </rule>
11 </urlrewrites>
The rule matching routine, wich is implemented in the GetMatchingRewrite() method is quite simple and lightweighted:

 1 public string GetMatchingRewrite(string URL)  {
 2      string strRtrn = "";
 3
 4      System.Text.RegularExpressions.Regex oReg;
 5
 6      foreach (RedirectRule oRule in Rules) {
 7
 8           Reg = new Regex(oRule.URL);
 9           Match oMatch = oReg.Match(URL);
10
11           if (oMatch.Success)  {
12                strRtrn = oReg.Replace(URL, oRule.Rewrite);
13           }
14
15      }
16      return strRtrn;
17 }
I have uploaded a sample project that uses this rewriting engine. The HttpModule and it's helper classes are inside the App_Code folder. I hope you find this code useful, if you have any questions just leave a comment in this entry. Happy coding!

 

--------------------------------------------------------------------------------
FROM DEVEL.oping.net
posted on 2006-04-26 14:17 徐灿钊Asp.net专栏 阅读(48) 评论(1)  编辑 收藏 收藏至365Key 所属分类: .net2.0
 
评论:
# re: Url Rewriting with Regex for ASP.NET 2.0(在asp.net2.0中使用正规表达式建立URL重写) 2006-04-26 20:22 | AXii

哈哈哈,测试后  1    public void Rewrite_BeginRequest(object sender, System.EventArgs args)
 2    {
 3        string appPath = HttpContext.Current.Request.ApplicationPath;
 4        HttpContext.Current.Response.Write(appPath + "<br />");
 5
 6        string strPath = HttpContext.Current.Request.Url.AbsolutePath;
 7        HttpContext.Current.Response.Write(strPath + "<br />");
 8
 9        strPath = strPath.Substring(appPath.Length);
10
11        HttpContext.Current.Response.Write(strPath + "<br />");
12
13        UrlRedirection oPR = new UrlRedirection();      
14
15        string strURL = strPath;
16
17        string strRewrite = oPR.GetMatchingRewrite(strPath);
18
19        if (!String.IsNullOrEmpty(strRewrite))
20        {
21            strURL = strRewrite;
22        }
23        else
24        {
25            strURL = strPath;
26        }
27
28        HttpContext.Current.RewritePath("~" + strURL);
29    }   发现这个处理办法对于虚拟路径会出现转发错误,注意第2、3、9行,是我增加的,可以有效的解决虚拟路径问题。
 
2、无法满足页面回发的问题!如何解决,还请您来修改:):

上一篇:page事件顺序(.net2.0) 下一篇:sql server 2005 排序规则与大小写敏感
本栏目热门文章
·如何实现无刷新的DropdownList联动效果 2005-10-4
·使用HttpWebRequest向网站模拟上传数据 2005-10-4
·当DataSet中包含主/子表时,Update更新步骤 2005-10-6
·ASP.NET2.0实现无刷新客户端回调 2005-11-13
·ASP.NET中文件上传下载方法集合 2006-5-28
·分享个极好的无刷新二级联动下拉列表,同样适用与firefox 2005-10-19
·在Web DataGrid中当鼠标移到某行与离开时行的颜色发生改变( 2005-10-4
·ASP.NET中实现Flash与.NET的紧密集成 2005-11-21
·关于Asp.net页面Page_Load被执行两次的问题 2005-10-4
·ASP.NET极限:页面导航 (翻译) 2005-10-8
新近更新文章
·在VS2003中直接用DREAMWEAVER8打开ASPX文件 2006-6-22
·asp.net2.0中异步调用WebService(异步页) 2006-6-22
·ASP.NET2.0数据库入门之常见错误 2006-6-22
·ASP.NET 2.0中XSLT的使用 2006-6-22
·.Net2.0 使用ConfigurationManager读写配置 2006-6-22
·.net 做的IP 访问限制 2006-6-22
·ASP.Net2.0 GridView 多列排序,显示排序图标,分页 2006-6-22
·数据岛出到Excel最为简易的方法 2006-6-20
·权限树中Checkbox的操作[Asp.Net2.0] 2006-6-20
·使用Data Access Application Block 得到 2006-6-20
首 页 | 软件发布 | 广告联系 | 下载帮助 | 意见反馈 | 网站地图
  CopyRight? 2002-2004 WWW.SXSKY.NET? All Rights Reserved
三湘时空 站长QQ:82675303 Email: