码迷,mamicode.com
首页 > 移动开发 > 详细

urlMappings与URL映射

时间:2017-03-03 01:10:10      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:info   man   开发者   url重定向   分享   类型   信息   管道   工具   

此配置节的作用就是往Web程序中添加URL的映射,从而达到用户访问映射后的URL(如/Page/AAA)也能访问到源URL(如/Page/PageAAA.aspx)的效果。这也是URL映射本来的作用。

详细配置如下

技术分享

其中要启用这个URL映射的必须要把enabled设置成true,add和remove的url都是映射后的URL。

最开始鄙人是在WebForm中尝试,结果是成功的;然后担心在MVC下已经废弃了,最开始可能是某些原因导致映射不了,直接说找不到URL,后来估计打断点查看一下两个应用程序(WebForm和MVC)的Application里面都包含了UrlMappingsModule。再接着在MVC下尝试,也不知啥原因就映射成功了。然而也发现实际上这个URL映射就是ASP.NET的HTTP管道里面的这个模块起的作用。

对于无知的我,让我去实现一个UrlMappingsModuel实现映射的话,多半会利用HttpResponse的Redirt通过URL重定向来从表面实现上达到这个URL映射的效果。以前刚开始学习ASP.NET的时候就觉得HttpResponse的Redirt就是页面跳转,了解到Http协议的时候才发现这两个还是有区别的。

先弄一个重定向的例子,有一个Action他是重定向到另一个Action——HelloWorld里面

技术分享

当访问这个RedHelloWorld的时候,通过谷歌的开发者工具看到网络请求是这样子的

技术分享

   

页面最终是访问到HelloWorld。可是这并非是请求RedHelloWorld的响应,其响应如上图,状态码302表示重定向,通过Location里面的"/Home/HelloWorld"字段来再次发起请求,最终显示的页面是HelloWorld的响应内容。

技术分享

(这一下子成了在说HTTP协议的,档次觉得降低了很多)

再看看URL映射的,在Web.Config中添加如下配置

技术分享

访问/Abc/aaa的时候呈现的是/Home/Index的内容,其响应头是这样子的200 OK

技术分享

为此我也专门看了一下源码,首先web.config里面的配置肯定是由某个以Section为后缀的配置读取类来获取,那这里的就是UrlMappingsSection。它读取了整个映射信息后会把它们存放到一个以UrlMappingCollection为类型、名为UrlMappings的集合里面

技术分享

这个集合会在两个地方被使用,一个是UrlMappingsModule,另一个是在ApplicationStepManager里面。这个ApplicationStepManager的具体作用我就没去认真探究,但通过HttpApplication里面的一点代码推测,这是在经典模式下使用的,另一个管道的应该是对应集成模式。这里如果我说错了其他大神可以拍砖,我非常乐意更改过来。

技术分享

那说回UrlMappingsModule里面的,他是注册了HttpApplication的BeginRequest事件,每当有请求来的时候他都会把要请求的URL拿过去UrlMappings比对一下看存不存在映射,

技术分享

   

如果存在了,那就调用HttpContext里面的RewritePath方法去重写这次请求的路径,这个RewritePath是一个公共的方法

技术分享

而对于HttpResponsed它就在响应头里面把状态码改成301或302,然后注明Location字段,下图节选自HttpResponse的内部方法Redirect重载。

技术分享

实际上还有另一种响应方式的,他是与WebForm那边有关系的,在使用MVC的时候就用不着了

技术分享

 

 
 

urlMappings与URL映射

标签:info   man   开发者   url重定向   分享   类型   信息   管道   工具   

原文地址:http://www.cnblogs.com/huilixieqi/p/6493142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!