控制器 - URL routing HTTP module(一)
URL routing HTTP module 负责处理检查入站请求的 URL,并将它们分派到最合理的处理器上。URL routing HTTP module 也替代了旧版本的 ASP.NET URL 重写特性。核心方面,URL 重写由 连接请求,转换原始 URL,指导 HTTP 运行时环境处理一个“最可能相关但存在区别”的 URL 这几个部分组成。
替代 URL 重写
如果我们需要在路由可读性、面向搜索引擎友好和需要以编程的方式处理若干的 URLs 方面上做权衡,那么,URL 重写就发挥作用了。比如,我们考虑以下 URL:
http://northwind.com/news.aspx?id=1234
news.aspx 页面包含了一些逻辑需要检索,格式化,并且显示相应新闻。特定新闻编号的检索通过查询字符串中的参数提供。作为一名开发者,实现这样的页面并非很容易,首先获得查询字符串的参数,然后执行查询,最后创建 HTML 页面,可是你也并非非常容易地记住这些 URL 地址。
然而 URL 重写可以在两个方面帮助你。第一,它让开发者使用通用的面向前端的页面成为可能,比如 news.aspx,来展示相关的内容。第二,它让用户访问更加友好的 URL 成为可能,这些 URL 都是通过编程的方式映射到敏感度降低但是更加易于管理的 URL 上。简单来说,URL 重写的存在就是为了降低请求的 URL 与处理请求的物理页面的耦合度。
在上个版本的 ASP.NET 4 Web Forms 中,你可以通过 URL 重写来匹配入站 URL 到其他的 URL 上,而非使用 HTTP 302 重定向的代价。相反的,在 ASP.NET MVC 里,URL 路由的目标就是将入站 URL 映射到对应的控制器和对应的行为方法上。
注意: URL routing module 原本开发为 ASP.NET MVC 的一个组件,但现在是 ASP.NET 平台一个原生的部分,正如上面所提,它同时向 ASP.NET MVC 和 ASP.NET Web Forms 应用提供服务,虽然通过一个稍微有点差别的 API.
路由请求
当一个请求到达 IIS 究竟发生了什么?
URL routing module 为应用拦截任何无法被 IIS 处理的请求。如果这个 URL 指向一个物理文件(比如,一个 ASPX 文件),routing module 就会忽略这个请求,除非这个 URL 被特别配置过。然后这个请求就会落到传统的 ASP.NET 机制上并被处理,也就是 page handler。
相反的,URL routing module 会尝试将请求 URL 与应用定义好的路由经行匹配。如果匹配成功,这个请求就会进入 ASP.NET MVC 空间并被处理。如果没有匹配成功,这个请求就会被标准的 ASP.NET 运行时所处理,并且很可能导致 HTTP 404 错误的显示。
最后,仅有那些匹配预先定义的 URL 模式的请求可以进入 ASP.NET MVC 运行时。所有的这些请求将会被路由到一个公共的 HTTP handler 上,它可以实例化一个控制器类并调用它当中的定义好的方法。然后,这个控制器中的方法,反过来会选择一个视图组件,并生成响应。
URL routing module 内部结构
依据实现原理,URL routing 引擎是一个封装了 PostResolveRequestCache 事件的 HTTP 模块。这个事件会在如果 ASP.NET 缓存中没有对应请求的响应时立即被启动。
HTTP module 将请求的 URL 与一个用户自定义的 URL 路由匹配,设置 HTTP context,并使用 ASP.NET MVC 标准 HTTP handler 处理请求。作为一个开发者,我们并不太可能直接与 URL routing module 打交道。这个模块由系统直接提供,并且你也不需要做相应形式的配置。然后,你有义务为你的应用提供相应的路由,而这个将会被 routing module 使用到。
【声明:本文是个人翻译而来。当中可能会存在许多不当之处,万望指出,谢谢。文章会持续更新】
控制器 - URL routing HTTP module(一)的更多相关文章
- [译]Angular-ui 之 Url Routing
◄ 前一篇 (Multiple Named Views) 下一篇 (The Components) ► 在你的应用中多数的状态都是基于特定的url地址的.Url Routing机制绝不是在状态 ...
- ASP.NET MVC 学习之路由(URL Routing)
在ASP.NET MVC中,一个URL请求是由对应的一个Controller中的Action来处理的,由URL Routing来告诉MVC如何定位到正确的Controller和Action. 默认路由 ...
- [ASP.NET MVC 小牛之路]07 - URL Routing
我们知道在ASP.NET Web Forms中,一个URL请求往往对应一个aspx页面,一个aspx页面就是一个物理文件,它包含对请求的处理. 而在ASP.NET MVC中,一个URL请求是由对应的一 ...
- URL Routing
们知道在ASP.NET Web Forms中,一个URL请求往往对应一个aspx页面,一个aspx页面就是一个物理文件,它包含对请求的处理. 而在ASP.NET MVC中,一个URL请求是由对应的一个 ...
- 【ASP.NET MVC 学习笔记】- 08 URL Routing
本文参考:http://www.cnblogs.com/willick/p/3343105.html 1.URL Routing告诉MVC如何正确的定位Controller和Action. 2.URL ...
- 通过通过url routing解决UIViewController跳转依赖
XYRouter https://github.com/uxyheaven/XYRouter XYRouter是一个通过url routing来解决UIViewController跳转依赖的类. * ...
- NFinal 控制器—URL
URL路由规则 规则:http://网址/模块名/控制器的相对路径的文件名/函数名.htm 例: http://localhost/App/IndexController/Index.htmhttp: ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- 深入理解Magento – 第二章 – Magento请求分发与控制器
深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第二章 – Magento请求分发与控制器 Model-View-Controller (MVC) ,模型-视图- ...
随机推荐
- bind的例子
10.24 给定一个string,使用bind和check_size在一个int的vector中查找第一个大于string长度的值. #include<iostream> #include ...
- UDID
大多数应用都会用到苹果设备的UDID号,UDID通常有以下两种用途: 1)用于一些统计与分析目的:[第三方统计工具如友盟,广告商如ADMOB等] 2)将UDID作为用户ID来唯一识别用户,省去用户名, ...
- 如何在 Objective-C 的环境下实现 defer
关注仓库,及时获得更新:https://github.com/draveness/iOS-Source-Code-Analyze Follow: https://github.com/Dravenes ...
- linux安全加固
1 . BIOS 你应该总是在系统启动的时候设置一个BIOS 密码和禁用从CD-ROM 和软盘引导,这将可以防止一些人未经允许访问你的系统和更改BIOS 设置 2 .sshd 服务 SSH 是一个协议 ...
- spinner中的onNothingSelected方法到底什么时候调用?
这个东东大家在开发中可能不太能用到,所以总是容易被忽略,由于工作原因,我最近琢磨了一下onNothingSelected方法的调用时机问题,其实很简单,只要我们稍微看一下源码就明白了: /** * C ...
- 远程之SSH
SSH(Secure Shell的缩写),由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远 ...
- 简单的实现QQ通信功能(五)
第五部分:聊天界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)左上角显示朋友的头像和“某某正在和某某聊天”. (2)中间的聊天窗口用了一个ListView,视图用详细信 ...
- $stop and $finish in verilog
$stop - Pauses the simulation, so you can resume it by using fg command in linux. In this case lince ...
- verilog中的task用法
任务就是一段封装在“task-endtask”之间的程序.任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的.调用某个任务时可能需要 ...
- SqlServer查找表中多余的重复记录
1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from ...