控制器 - 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 使用到。

时间: 2024-08-29 00:49:56

控制器 - URL routing HTTP module(一)的相关文章

[译]Angular-ui 之 Url Routing

? 前一篇 (Multiple Named Views)     下一篇 (The Components) ? 在你的应用中多数的状态都是基于特定的url地址的.Url Routing机制绝不是在状态机制之上后加的东西,而是一开始就是规划在最初设计方案(译注:angular-ui的设计方案)之中的(在实现url路由的同时独立的保持状态).下面代码展示了你如何设置一个url: Most states in your application will probably have a url asso

ASP.NET MVC 学习之路由(URL Routing)

在ASP.NET MVC中,一个URL请求是由对应的一个Controller中的Action来处理的,由URL Routing来告诉MVC如何定位到正确的Controller和Action. 默认路由表 当我们在VS中创建一个新的 ASP.NET MVC程序,程序将会自动使用默认的路由表. public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInf

URL Routing

们知道在ASP.NET Web Forms中,一个URL请求往往对应一个aspx页面,一个aspx页面就是一个物理文件,它包含对请求的处理. 而在ASP.NET MVC中,一个URL请求是由对应的一个Controller中的Action来处理的,由URL Routing来告诉MVC如何定位到正确的Controller和Action. 笼统的讲,URL Routing包含两个主要功能:解析URL 和 生成URL,本文将围绕这两个大点进行讲解. 本文目录 URL Routing 的定义方式 让我们从

通过通过url routing解决UIViewController跳转依赖

XYRouter https://github.com/uxyheaven/XYRouter XYRouter是一个通过url routing来解决UIViewController跳转依赖的类. * 本类采用ARC Installation 本库基于ARC 拷贝XYQuick到项目里 在需要用的文件或者pch里 #import "XYRouter.h" Podfile pod 'XYRouter' #import "XYRouter.h" Usage Creatin

NFinal 控制器—URL

获取URL参数 在控制器的方法中加入一些参数,例如user,然后输出. using System; using System.Collections.Generic; using System.Web; namespace WebMvc.App.Controllers { public class SampleController:Controller { public void Show(string user) { Write(string.Format("Hello {0}.",

控制器 - 应用路由(二)

从设计角度出发,一个 ASP.NET 应用程序并非强制地依赖物理页面.在 ASP.NET MVC 中,用户发出请求并在某个资源上做相应处理.然而,就整个框架而言,并非授权这种语法来描述资源和行为.我深信这样的表述使你很可能地想到了 REST(Representational State Transfer). 虽然你可以在一个 ASP.NET MVC 应用中使用纯粹的 REST 方案, 但是我想说的是ASP.NET 是松散的面向 REST,它承认例如资源和行为的概念.举个例子,在一个纯 REST

ASP.NET MVC 開發心得分享 (21):Routing 觀念與技巧

ASP.NET MVC 預設在 Global.asax 所定義的 RegisterRoutes 方法中可以輕易的定義你希望擁有的網址格式,嚴格上來講這並非 ASP.NET MVC 的專利,而是從 ASP.NET 3.5 SP1 就加入的新特性,所以就算是傳統的 ASP.NET Web Form 一樣可以利用 Routing 所帶來的好處,今天我就來講一些 Routing 的觀念與技巧. 快速上手 我先解釋在 ASP.NET MVC 專案中 Global.asax 所定義的 Routing 程式碼

Magento请求分发与控制器

Magento请求分发与控制器 Magento使用的是MVC结构,模型-试图-控制器结构,这样更好的实现显示逻辑和数据,业务逻辑的分离,更好的适合开发! 下面为传统的mvc结构 URL请求被一个PHP文件拦截,这个文件通常称为前端控制器(Front Controller)    这个PHP文件分析这个URL,获得一个执行控制器(Action Controller)的名字和一个执行方法(Action Method)的名字,这个过程称为路由(Routing)    实例化#2获得的执行控制器   

控制器和路由

1.控制器以Controller做为后缀,继承自 yii\web\Controller 2.动作以action为前缀,public访问修饰 3.控制器ID去类名后缀,全部转为小写,如果是驼峰命名多个单词,转为中杠分隔 4.动作ID去前缀,全部转为小写,如果是驼峰命名多个单词,转为中杠分隔. 5.路由如何指向动作 控制器ID.动作ID 6.URL访问规则index.php?r=路由   传参数使用&参数=值的方式 7.默认动作ID index定义在 yii\base\Controller::$de