仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 561|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计asp.net2.0利用正轨表达式创建URL重写

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到java编译器那么简易。asp.netAnewfeatureinAsp.Net2.0isitsbuilt-inurlrewritingsupport.Whenilookedintothisnewfeatureifoundoutitlackedregularexpressionssupport,wichisreallythepointofanUrlMapper.ScottGluathisblog,explainsthereasonwhytheAsp.Netteamdidntimplementedthisfeature.BasicallytheyrealizedthatafullfeaturedversionwouldwanttotakeadvantageofthenextIIS7.0newfeatures,speciallythesupportforallcontent-types(imagesanddirectories).
Anyway,itsreallysimpletoimplementaUrlRewritingModulewithRegexsupportinAsp.Net.IwroteaquickandsimpleHttpModuleforthis.ThewholemagicisdonewithinafewlineswithintheHttpModule:
1publicvoidRewrite_BeginRequest(objectsender,System.EventArgsargs){
2stringstrPath=HttpContext.Current.Request.Url.AbsolutePath;
3UrlRedirectionoPR=newUrlRedirection();
4stringstrURL=strPath;
5stringstrRewrite=oPR.GetMatchingRewrite(strPath);
6if(!String.IsNullOrEmpty(strRewrite)){
7strURL=strRewrite;
8}else{
9strURL=strPath;
10}
11HttpContext.Current.RewritePath("~"+strURL);
12}
Thecodeisselfexplanatory.WhenarequestthatisprocessedbytheAsp.Netengine,themodulechecksanxmlforaregexmatch.IveseenmanyUrlRewritingenginesthatusesWeb.configtostorethematchingrulesbutipreferusinganadditionalxmlfile.Therewritingrulesfilelooklikethefollowing:
1<?xmlversion="1.0"encoding="utf-8"standalone="yes"?>
2<urlrewrites>
3<rulename="CategoryPage">
4<url>/([a-zA-Z][w-]{1,149}).aspx</url>
5<rewrite>/Default.aspx?Category=$1</rewrite>
6</rule>
7<rulename="ItemPage">
8<url>/([a-zA-Z][w-]{1,149})/([a-zA-Z][w-]{1,149}).aspx</url>
9<rewrite>/Default.aspx?Category=$1&Item=$2</rewrite>
10</rule>
11</urlrewrites>
Therulematchingroutine,wichisimplementedintheGetMatchingRewrite()methodisquitesimpleandlightweighted:
1publicstringGetMatchingRewrite(stringURL){
2stringstrRtrn="";
3
4System.Text.RegularExpressions.RegexoReg;
5
6foreach(RedirectRuleoRuleinRules){
7
8Reg=newRegex(oRule.URL);
9MatchoMatch=oReg.Match(URL);
10
11if(oMatch.Success){
12strRtrn=oReg.Replace(URL,oRule.Rewrite);
13}
14
15}
16returnstrRtrn;
17}
Ihaveuploadedasampleprojectthatusesthisrewritingengine.TheHttpModuleanditshelperclassesareinsidetheApp_Codefolder.Ihopeyoufindthiscodeuseful,ifyouhaveanyquestionsjustleaveacommentinthisentry.Happycoding!
--------------------------------------------------------------------------------
FROMDEVEL.oping.net
postedon2006-04-2614:17徐灿钊Asp.net专栏浏览(48)批评(1)编纂保藏保藏至365Key所属分类:.net2.0

批评:
#re:UrlRewritingwithRegexforASP.NET2.0(在asp.net2.0中利用正轨表达式创建URL重写)2006-04-2620:22|AXii
哈哈哈,测试后1publicvoidRewrite_BeginRequest(objectsender,System.EventArgsargs)
2{
3stringappPath=HttpContext.Current.Request.ApplicationPath;
4HttpContext.Current.Response.Write(appPath+"<br/>");
5
6stringstrPath=HttpContext.Current.Request.Url.AbsolutePath;
7HttpContext.Current.Response.Write(strPath+"<br/>");
8
9strPath=strPath.Substring(appPath.Length);
10
11HttpContext.Current.Response.Write(strPath+"<br/>");
12
13UrlRedirectionoPR=newUrlRedirection();
14
15stringstrURL=strPath;
16
17stringstrRewrite=oPR.GetMatchingRewrite(strPath);
18
19if(!String.IsNullOrEmpty(strRewrite))
20{
21strURL=strRewrite;
22}
23else
24{
25strURL=strPath;
26}
27
28HttpContext.Current.RewritePath("~"+strURL);
29}发明这个处置举措关于假造路径会呈现转发毛病,注重第2、3、9行,是我增添的,能够无效的办理假造路径成绩。

2、没法满意页面回发的成绩!怎样办理,还请您来修正:):
刚刚打开这篇专题,猛然见到HAL9000发表的《对于大型公司项目平台选择j2ee的几层认识》系列,深受启发。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-19 19:31:50 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
海妖 该用户已被删除
板凳
发表于 2015-1-25 15:37:03 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-8 19:10:19 | 只看该作者
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
变相怪杰 该用户已被删除
5#
发表于 2015-2-25 22:54:18 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-3-8 10:07:32 | 只看该作者
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
飘灵儿 该用户已被删除
7#
发表于 2015-3-15 21:40:10 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
再现理想 该用户已被删除
8#
发表于 2015-3-22 05:10:13 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 23:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表