综述:ASP.NET MVC请求处理管道

ASP.NET MVC请求处理管道股份许多共同点与传统的ASP.NET Web表单利用IIS然而不像ASP.NET MVC Web窗体给你更多的灵活性你可以修改任何一个你自己的喜好甚至重新调整或更换部件最重要的区别是地方的路由当然你可以在传统的ASP.NET Web表单MVC路由相似但不是默认)和控制器和过滤器扩展你的能力,更大的规模以及

本文将指导你通过这个无限扩展的请求处理管道主要讨论了四个主要的步骤来帮助你抓住大的想法理解什么是要在幕后场景

1.iis

互联网信息服务微软Web服务器系统作为ASP.NET请求处理的骨干每个HTTP请求服务器一个内核模式设备驱动程序称为HTTP.SYS将首先分类根据其请求的URL请求端口和IP地址的组合,然后转发给一个已注册的应用程序IIS网站

基本上是建立在ASP.NETASP.NET MVC的ASP.NET核心必须保证正常工作ASP.NET MVC应用程序池启用当您创建IIS这样一个网站一个应用程序池的设置应指定适当ASP.NET工作线程来照顾的HTTP请求你可以修改应用程序托管管线模式设置多但这方面是偏离了这篇文章的目的和不会在这里讨论

一个请求到达一个ASP.NET启用IIS网站ASP.NET应用程序池工作线程被派遣来对付请求向每个注册HTTP模块,一个新的请求开始HTTP模块NET类实现IHttpModule接口你可以连接到ASP.NET请求处理管道他们通常用于处理特定的事件,如路由信息登录请求的生命周期

一个特别重要的HTTP模块是由任何ASP.NET MVC应用程序的默认注册:urlroutingmodule这个模块是核心路由系统,请求处理管道的第二步骤中起着最重要的角色开始如果你工作MVC 2目标3.5你会发现这个模块Web.config文件中注册另一方面4urlroutingmoduleweb.config文件,默认配置机器广泛引用看到它的安装和运行可以在模块在IIS标签您在Internet信息服务IIS)经理现场一看

2。核心路由

system.web.routing组件调用时,urlroutingmodule介入处理一个请求路由的核心工作是关于认识和分析输入的URL设置请求上下文的数据结构,随后的组件可以使用任何他们希望ASP.NET MVC使用它来控制传递到相关MVC控制器类动作方法参数的供应

核心的ASP.NET MVC路由首先查看传入请求的URL对一个静态的文件(如图像文件或磁盘上的样式表文件如果是这样核心路由通过把它留到IISIIS将提供客户直接使工艺可以有效地完成

另一方面如果输入的URL不目标磁盘上的静态文件例如映射到一个MVC控制器核心路由系统将追究其主动配置如何处理传入的URL

如何配置路由在一个静态的集合称为system.web.routing.routetable.routes此集合中的每个条目代表一个不同的URL模式应用程序希望接受例如/商店/目录/ {id}约束,限制每个参数的可接受的值的范围此外每个条目将提供一个路由处理程序对象实现iroutehandler从而接管工艺的要求路由ASP.NET MVC应用程序路径集合通常是通过添加代码的方法称为registerroutes()在global.asax文件设置

以符合特定的传入请求核心路由系统通过路由从上到下收集路线选择相匹配的URL模式的第一项找到匹配项路由传输控制进入指定的路由处理器一个请求上下文的数据结构,描述了路由条目参数的URL解析MVC框架,然后在行动上

3。控制器和操作

达到这一步核心路由系统在路由选择的特定项目。路线解析任何路由参数URL和包装他们请求上下文数据结构里面现在是控制器和行动进入现场的时间

在一般情况下ASP.NET MVC应用程序几乎所有的路由条目指定一个特定的路由处理程序mvcroutehandler它是内置的默认路由处理程序的ASP.NET MVC它知道如何请求的上下文数据调用相应的控制器类这是通过使用一个控制器工厂对象默认情况下defaultcontrollerfactory使用,但是它可以通过自定义控制器工厂代替案例特别关注

提高例如依赖注入的需求

当一个相应的控制器,由控制器工厂对象选择执行的方法被称为执行IController接口每个控制器类中定义的唯一方法必须实现这样的接口

publicinterfaceicontroller

{

无效的执行requestcontextrequestcontext

}

请注意,RequestContext参数提供的所有请求的上下文数据路由系统的构建包括参数的解析,从传入请求URL它还提供了访问请求和响应对象

在大多数情况下,将与高层次的控制器和隐藏执行方法的底层细节IController接口定义因此,你基本上不会写数据到响应流直接相反,返回一个行动的结果描述预期输出你的控制器例如如果返回一个ViewResult这样的控制器的目标是提供一个视图redirecttorouteresult如果你想请求重定向到一个不同的动作方法或一个不同的控制器MVC框架将负责执行请求处理管道的结果在适当的时刻

请注意,过滤器可以被连接到一个控制器类一个动作方法注入额外的逻辑运行之前或之后的行动方法或前或后的行动结果的执行过滤器是非常灵活的,他们的逻辑可以运行在许多可能的时刻,在这一步的请求处理管道

总之,控制器和动作是整个ASP.NET MVC框架的中心支柱

4。行动的结果和意见

在这一点上MVC框架会问你的控制器返回的ActionResult对象执行ActionResult什么类型的actionresultdoes要么返回一个字符串的浏览器产生一个HTTP重定向或最有趣的部分来渲染一个视图

渲染一个视图的工作即是ViewResult ActionResult这是一个能够定位并提供一个特别的角度,沿着任何可视数据结构作用的方法构建了它通过调用视图引擎例如Web窗体视图引擎MVC 2MVC 3 Razor视图引擎由控制器确定

传统的ASP.NET Web表单每个Web窗体ASPX页面有一个专用的管道在其自己的,基于ASPX / ASCX编译和运行通过一系列的事件称为页面生命周期ASP.NET MVC讲述一个不同的故事它的视图页面简单只包含用户界面逻辑Web窗体的文件也没有生命周期没有任何代码把你从一个智能的UI设计湿地更好的架构对关注点分离

------------------------------------------------------

下面的工作流程可以帮助你更好地理解ASP.NET MVC请求处理管道



posted on 2013-03-15 10:10  初心不可忘  阅读(1999)  评论(1编辑  收藏  举报