urlMappings与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映射的更多相关文章
- ASP.NET MVC 5 Web编程2 -- URL映射(路由原理)
本章将讲述ASP.NET MVC5 的路由原理,即URL映射机制. 简单点就是解释:为什么MVC在浏览器输入地址就能访问到类(或类中的方法)?这是怎么做到的?我自己可以通过.NET写出一个自己的MVC ...
- django中“url映射规则”和“服务端响应顺序”
1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单. 查看方式: import sys print sys.path ...
- MVC 5 Web编程2 -- URL映射
ASP.NET MVC 5 Web编程2 -- URL映射(路由原理) 2015-02-12 08:50 by hangwei, 704 阅读, 5 评论, 收藏, 编辑 本章将讲述ASP.NET M ...
- CCF CSP 201803-3 URL映射
转载自 https://blog.csdn.net/tigerisland45/article/details/81697594 /* CCF201803-3 URL映射 */ #include &l ...
- SpringMvc的Url映射和传参案例(转)
Springmvc的基本使用,包括url映射.参数映射.页面跳转.ajax和文件上传 以前学习的时候写的代码案例,今天整理笔记的时候找到了,很久没有来园子了,发上来当个在线笔记用吧,免的时间长了又忘了 ...
- SpringMvc的Url映射和传参案例
Springmvc的基本使用,包括url映射.参数映射.页面跳转.ajax和文件上传 以前学习的时候写的代码案例,今天整理笔记的时候找到了,很久没有来园子了,发上来当个在线笔记用吧,免的时间长了又忘了 ...
- 使用 IntraWeb (32) - Url 映射与 THandlers
最简单的 Url 映射是使用 TIWAppForm 的 class 方法: SetURL; THandlers 是 IntraWeb XIV 新增的内容处理器, 它能完成的不仅仅是 Url 映射(转发 ...
- Django - 将URL映射到视图
URLconf 就像是 Django 所支撑网站的目录.它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表.你就是以这种方式告诉 Django,对于这个 URL 调用这段代码, ...
- 搭建RESTful API 之 实现WSGI服务的URL映射
javarestfull 搭建参考 http://blog.csdn.net/hejias/article/details/47424511 问题引出:对于一个稍具规模的网站来说,实现的功能不可能通过 ...
随机推荐
- 禁用nested loop join里的spool
禁用nested loop join里的spool 转载自: https://blogs.msdn.microsoft.com/psssql/2015/12/15/spool-operator-and ...
- JavaScript多文件下载
对于文件的下载,可以说是一个十分常见的话题,前端的很多项目中都会有这样的需求,比如 highChart 统计图的导出,在线图片编辑中的图片保存,在线代码编辑的代码导出等等.而很多时候,我们只给了一个链 ...
- LVS原理与使用(1)
负载均衡,无论是否真正了解过,但我相信所有跟编程打交道的读者都有听说.同时,它(负载均衡)也是被认为一个大型网站的标识性技术之一(但负载均衡的作用肯定不止这点用途).虽然网上也有不少关于LVS配置实用 ...
- SQL Server 创建数据库邮件
一. 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果. 二. 基础知识 msdb系统数据库保存有关Job,Database Mail,Nodifyicati ...
- Html 特殊符号
HTML特殊符号对照表 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η Η Η Θ Θ Θ Ι Ι Ι Κ ...
- 【WP开发】不同客户端之间传输加密数据
在上一篇文章中,曾说好本次将提供一个客户端之间传输加密数据的例子.前些天就打算写了,只是因一些人类科技无法预知的事情发生,故拖到今天. 本示例没什么技术含量,也没什么亮点,Bug林立,只不过提供给有需 ...
- lua解释执行脚本流程
#include "lua.hpp" #include <iostream> using namespace std; #pragma comment(lib, &qu ...
- nodejs+easyui(抽奖活动后台)增删改查
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfAAAAJACAIAAAD97KNZAAAgAElEQVR4nO2daXxb5Z2o7w+dO1/ufL ...
- Android自定义View 画弧形,文字,并增加动画效果
一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类 B ...
- 窥探Swift编程之别样的HelloWorld
从今天就开始陆陆续续的发布一些有关Swift语言的东西,虽然目前在公司项目开发中Objective-C还是iOS开发的主力军,但是在不久的将来Swift将会成为iOS开发中的新生宠儿.所以在在Xcod ...