仓酷云

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

[学习教程] ASP.NET网页编程之URL重写可删省日期形式---正则表达式之...

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

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

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

x
今天去面试,被问到C#中的new关键字,看了那么多的书对new关键字还是有一定认识,回来又把new复习了一遍,发现了许多以前还不知道的细节。日期|正则比来忙着本人的博客程序,天然而然就转到了博客中须生长谈的URL重写成绩。一个缘故原由是在多用户博客体系中的一个体面成绩,原本想拿我的CSDN博客http://blog.csdn.net/joshualang来讲事,想一想仍是用我的空间(http://www.tyoo.net)吧,由于这是我的博客完功以后的往所了。
像http://www.tyoo.net/blog/joshualang如若不举行需要的URL重写,就会出http://www.tyoo.net/blog/default.aspx?Bloger=joshualang模样的博客地点;人人要晓得BLOG可谓是年夜部分网平易近视为筑在收集上的另外一个家,实际生存中会思索家的地点远近,交通优劣,一样收集中的家也要有个好记的门商标的。这个门商标还不算太长(还不是很面子哦),后边在加上一堆的参数只怕让人渐渐见而生畏,要看文章就要面临这么一年夜堆http://blog.tyoo.net/Articles/Default.aspx?Bloger=joshualang&ArticleID=20070118234530是否是有甚么感到了?再看看如今很多多少博客程序都要失掉的一种效果吧http://blog.tyoo.net/joshua/Articles/2007/01/18/人人一看就晓得这类效果的优点了,这也就引到了本文的重点地点了!
是的,要经由过程如许一个很规整的字符串来到达我们的一个方针。
一个可行的URL应当遵守以下尺度来选择:
•冗长。

•易于键进。

•能够看出站点的布局。

•“可删省”,同意用户经由过程删除URL的构成部分来扫瞄站点。

致于这点就不必我来多说了,实在都是要凸起复杂,有用。
注重:说到这里就有需要看看MSDN网站上ScottMitchell的一遍文档http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?pf=true#top
已有专家在这里将URL重写的道理讲得充足明白了,不懂还能够下载上边文档的源代码来研讨一下。
为了图效力(人的工夫是可贵的,程序员的工夫更是),就间接接纳URLRewriter.net的组件,实践上之前没打仗过URL重写履历,大抵得源程序看了几遍就入手下手上路了。入手下手固然不求甚么手艺含量了,只需能重写乐成就已感到很OK了,然后才是在不休的重写过程当中找出个中成绩另有新思绪,新发明。。。以是就有了这遍文章。
如今入手下手吧。此次针对的实在次要就是刚提到的日期形式的URL重写.
http://blog.tyoo.net/Articles/2007/01/18/233030/joshualang.aspx这就是要在这里完成的最后的效果。

基本:UrlRewriter.net组件(固然也能够自已写),懂得正则表达式
参数:ArticleID//文章编号[范例:string长度:14(like:yyyymmddhhmmss)//成心义且不会反复]
Bloger//博主用户名[范例:string字母开首]
在URL重写过程当中碰到的一个成绩就是在会见不存在的目次或文件时呈现404毛病。在MSDN上的这遍文档供应的倡议就是在程序目次下创建需要的文件夹目次及空的页面,说贫苦切实其实是贫苦,数千的目次必要创建。
既然不克不及任意就会见不存在的目次文件,那我们不会见如许的目次不就好了。就要会见我们已存在的文件(我的全体URL指向都是根目次Blog下的一个Default.aspx页面然后静态加载控件组天生分歧的视图功效页面)固然此次要指向的仍是这个页面~/Default.aspx;
上面的义务就是传送参数,固然是URL传值了。这就是重写它的缘故原由了。
配角又要进场了:正则表达式。
在这里用正则表达式真的是太帅了~http://blog.tyoo.net/joshualang/Articles/2007/01/18/Default.aspx目次你大概会天生以下如许的URL重写划定规矩:
<RewriterRule>
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4</SendTo>
</RewriterRule>

如许写出的划定规矩在举行删省时一定是会由于会见的页面不存在而发生404毛病。由于它会顺着你的目次标志一向往下找,如果再建目次工程可就年夜了,再看看下边的代码:
<RewriterRule>
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4&time=$5</SendTo>
</RewriterRule>

这下多出了工夫部分该没人会选择建目次了。那就充实使用已存在的文件来完成这个义务吧。
实在一说大概有良多人都能想到用文件名来取代目次布局。想一想看,是否是如许。固然这还得对正则表达式有必定的懂得。
好,来看看完成吧。
<RewriterRule>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$2$3$4$5&Bloger=$1</SendTo>
</RewriterRule>

人人很简单看出我这里用到了“”对“/”举行了本义,并且用在了文件名里边如今的布局就是
http://blog.tyoo.net/joshualang/2007/01/18.aspx
很明显我的ArticleID就是一个以年代日时分秒为基本的字符串,由于如许拔出数据不必思索反复另有意义,而在这里用工夫也为查询时便利。$2$3$4$5失掉的14位组合就是我的ArticleID.经由过程宣布日期,文章编号都能够很简单查出纪录。而最初一点优点就在举行删省时体现的特为分明。
如今来让我们删省工夫部分:
<RewriterRule>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$2$3$4&Bloger=$1</SendTo>
</RewriterRule>

顺次我们能够将URL删省为如许的形式:http://blog.tyoo.net/joshualang/Articles/2007.aspx乃至http://blog.tyoo.net/joshualang/Articles/Default.aspx
是否是很复杂。但你要注重一个成绩了:甚么事不是可以就会完成的了,必要思索的另有良多好比:
http://blog.tyoo.net/joshualang/Articles/2007.aspx和http://blog.tyoo.net/joshualang/Articles/2007/.aspx有甚么区分,做到上边的划定规矩后后者可否一般运转?不克不及
一样:http://blog.tyoo.net/joshualang/Articles/2007/01/08/.aspx也是不可的。还必要界说别的应对划定规矩来完成恰如其份的重写效果。
好了,大抵上效果已出来了;这里是完全的划定规矩代码:
<!--author:JoshuaLi(joshuasco@126.com)QQ:245965348-->
<!--RulesforBlogContentDisplayer-->
<RewriterRule>
<LookFor>~/([A-Za-z]w{5,16})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</RewriterRule>
<!--RulesforArticleLister-->
<RewriterRule>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/(d{1,6})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4&Bloger=$5</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/(d{1,6})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3&Bloger=$4</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/(d{4})/(d{2})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2&Bloger=$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/(d{4})/(d{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/(d{4})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1&Bloger=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/(d{4})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Articles/Default.aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=-1</SendTo>
</RewriterRule>
申明:在这里为了访止用户误删省失落主要的.aspx扩大名,我将用户名作为了文件的假造标识称号。
最初失掉的URL:http://blog.tyoo.net/Articles/2007/01/18/015000/joshualang.aspx
同时将放在最初的最长为6位的工夫设置为可删省变长,就算丢了某些数字也能最便利的找到与该宣布工夫最靠近的列表。
在往除用户名后也不会影响到利用,仍是经由过程前边具体的工夫格局很快会失掉与您必要的文章最批配的列表。假如用户名无缺则能经由过程删省找到特准时间段对应作者的文章列表。
还要注重的是:用户名的格局([A-Za-z]{6-16})和划定规矩考证的按次。
总结:
经由过程划定规矩的URL重写历程后像实践存在此目次一样会具有周密的格局但显得框架布局更便利更天真,从而失掉功效和用户体验上的重点提拔
临时到这里吧。有甚么疑问接待复兴到场会商。假如有更好的重写办法很乐意能关照下自己哦。
有专家说:java不是跨平台,java就是平台,这很好的定义了java的特点。有了java,你只需要等待java平台在新平台上移植。这还不错吧!只是,java不是一个平台,而是多个平台。你需要在这个java平台移植到另一个java平台。
不帅 该用户已被删除
沙发
发表于 2015-1-19 23:51:30 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-2-4 21:17:56 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
冷月葬花魂 该用户已被删除
地板
发表于 2015-2-10 12:20:28 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
精灵巫婆 该用户已被删除
5#
发表于 2015-3-1 10:39:01 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
活着的死人 该用户已被删除
6#
发表于 2015-3-10 14:58:55 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
因胸联盟 该用户已被删除
7#
发表于 2015-3-17 08:09:45 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
只想知道 该用户已被删除
8#
发表于 2015-3-24 03:24:16 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-21 12:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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