首页 > 技术文章 > .net中实现伪静态的学习小结

20m13v08c15 2014-12-05 10:09 原文

好久不写博文了,回想起来上一篇博文应该是很久以前写的了。今天写点过去的学习心得——.net中实现伪静态。

比如:类似这样的链接list.aspx?id=1&pid=5,我们并不想在浏览器地址栏中(注意这句话)看到后缀和参数的传递,我们想让他变成list-1-5.html这样的。原理很简单,首先展现给客户点击的部分就写成list-1-5.html或者是其他的静态的.html链接,比如:list/1/5.html或者list_1_5.html等,在前台部分都这样写,浏览器不管你处理的页面,他只知道你是点击了一个.html(我是这样理解的),那么打开的页面的浏览器地址栏中就是这个.html,然后我们看到的下面这个部分其实是一个处理程序运行的结果。说白了叫改变应用程序的处理方式,让处理页面偷偷的运行,然后推到前方),我还有点不明白的是:为什么IIS这样处理:我点击.html的页面,但是这个页面中目录中并不存在,平时我们请求一个html页面的话,没有这个文件就显示找不到是吧?但是这里有点不同,他让浏览器的地址部分和处理程序也就是接收参数的aspx页面合到一起了,地址显示的是点击的什么什么.html,然后下面的部分是aspx处理呈现的,还是一个aspx页面。可以这样理解,但是就是有点看不懂,不好理解。

说到伪静态有2种方式。第一种:用一个类来分解请求的.html这个中的参数,加上在web.config中进行简单的配置就OK,把这些参数传给aspx的处理页面去处理,然后呈现结果。还有一种是直接在web.config中配置,稍微复杂一点,然后他不用去写一个特殊的处理类就可以让处理页面接到传值呈现结果了。

必要条件:都离不开一个第三方的.dll文件:URLRewriter.dll

搞一个过程吧,这样看起来很直观:

新建web网站在vs2010(这个是我的环境)中

在bin文件中引用上面的.dll

在目录下新建一个aspx页面用来呈现给用户,在其中放置链接,直接上图:

这个是呈现给用户去点的,总要有个入口吧~。

先说第一种方式的处理,上面我们说了第一种是要一个类来分解这个参数把这个参数传到处理页面也就是.aspx页面去处理,上类的图:

这里注意一点:这个类一定要放在App_Code这个文件夹中,这个类就是在处理页面之前捕获客户端发到服务器端的请求页面的值,对这个值进行处理得到参数。App_Code这个文件夹对于一个解决方案来说是一个全局文件夹,任何的请求之前都要先执行这个中间的对应方法类,比如:过滤输入的类可以放在里面,然后捕获请求的也可以放其中等等。反正就是中处理程序之前处理的都可以放这个里面(暂且这样理解)。

接下来就是上面的那个detail.aspx了,这个文件是真正处理的页面,上图:

好了,最后配置一下config文件,上图:

运行一下,在那个类那里设一个断点,他肯定跑去那里了。

下面说第二种,这种唯一的区别是在web.config这个文件中,上面的那个类也不要了,直接上配置文件的图:

好了,其他的不变,运行,是同样的结果。第二种,我感觉那个.dll类中也做了处理的了,怎么处理?我想应该是把那个config中的配置就是上图的2部分处理了一下,就这么简单我觉得。

写个个人感觉吧,综合起来第一种要简单一点,为什么,我是这样理解的,一个类可以处理很多种不同的情况,而你在config中配置的话就没有那么灵活了,看上面图中 2 的部分,要这样写的话,如果像新浪那么大的那么多的处理页面那个config还不大的惊人(虽然正则可以覆盖大部分也很不方便啊!),处理类就不同了,处理页面可以作为一个变量放在程序中,谁来改谁。

其实这是我的一点个人学习感受,有不同意见的可以相互指点。说到这,我有点对webconfig这个文件更多的佩服,微软用这个文件中应用程序中居然发挥那么大的作用,真是感觉自己就像是井底之蛙。学习中~~~

推荐阅读