请求处理管道
请求管道是一些用于处理HTTP请求的模块组合,在ASP.NET中,请求管道有两个核心组件:IHttpModule
和IHttpHandler
。所有的HTTP请求都会进入IHttpHandler
,有IHttpHandler
进行最终的处理,而IHttpModule
通过订阅HttpApplication
对象中的事件,可以在IHttpHandler
对HTTP请求进行处理之前对请求进行预处理或IHttpHandler
对HTTP请求处理之后进行再次处理。
在IIS7之前,如IIS6或IIS5,请求处理管道分为两个:IIS请求处理管道和ASP.NET管道,若客户端请求静态资源则只有IIS管道进行处理,而ASP.NET管道不会处理该请求。从IIS7开始两个管道合二为一,称为集成管道。
上图中主要描述ASP.NET运行时对HTTP请求的处理且不涉及太多细节。
HttpApplication与HttpModule
HTTP请求由ASP.NET运行时接管之后,HttpRun<a href="http://www.php.cn/wiki/1268.html" target="_blank">time</a>
会利用HttpApplicationFactory
创建或从HttpApplication
对象池(.NET中类似的机制有线程池和字符串拘留池)中取出一个HttpApplication
对象,同时ASP.NET会根据配置文件来初始化注册的HttpModule
,HttpModule
在初始化时会订阅HttpApplication中的事件来实现对HTTP请求的处理。
在ASP.NET MVC5中,Global.asax
文件中定义了MvcApplication
类,继承自HttpApplication
类:
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteTable.Routes.Add("xfhHandler", new Route( "{controller}/{action}", new RouteValueDictionary(new Dictionary<string, object>() { ["controller"] = "home", ["action"] = "index" }), new XfhUrlRouteHandler()) ); //RouteConfig.RegisterRoutes(RouteTable.Routes); } }
Application_Start()
方法最先执行,一般在该方法中添加一些配置,如路由注册、全局过滤器的注册等。
Route
一个HTTP请求会经过至少一个HttpModule
的处理。UrlRoutingModule
是非常重要的模块,它是路由系统的核心。路由系统的职责是从请求URL中获取controller和action的名称以及其它请求数据。UrlRoutingModule
根据当前请求的URL和RouteTable
中已注册的路由模板进行匹配并返回第一个和当前请求相匹配的路有对象Route
,然后根据路有对象获取路由数据对象RouteData
(ASP.NET MVC中,路由数据必须包含controller和action的名称),再有RouteData
获取IRouteHandler
最终有IRouteHandler
得到IHttpHandler
。
HttpHandler
一个HTTP请求最终要进入HttpHanler中进行处理,一次HTTP请求只能被一个HttpHandler进行处理。
Controller
IHttpHandler
在ProcessRequest
方法中对当前请求进行处理,在该方法中通过ControllerBuilder
得到IControllerFactory
然后通过反射的方式获取Controller
的类型。
Action
ASP.NET MVC中ControllerBase
是所有Controller
的基类,在类型的Execute
方法中通过IActionInvoker
的InvokeAction
方法来执行对Action
的调用。在Action
执行前会进行模型绑定和模型认证操作。
Filters
在ASP.NET MVC5中有常用的过滤器有5个:IAuthenticationFilter
、IAuthorizationFilter
、IActionFilter
、IResultFilter
、I<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>Filter
。
在ASP.NET MVC中所有的过滤器最终都会被封装为Filter
对象,该对象中FilterScope
类型的属性Scope
和int
类型属性<a href="http://www.php.cn/wiki/1360.html" target="_blank">Ord</a>er
用于决定过滤器执行的先后顺序,具体规则如下:
Order
和FilterScope
的数值越小,过滤器的执行优先级越高;Order
比FilterScope
具有更高的优先级,在Order
属性值相同时才会被考虑
//数值越小,执行优先级越高public enum FilterScope { Action= 30, Controller= 20, First= 0, Global= 10, Last= 100}
ActionResult
Action
执行完毕之后会返回ActionResult
类型对象作为对此次请求进行处理的结果,对于不是ActionResult
类型的返回值,ASP.NET MVC会将其转换为ActionResult
类型。
请求生命周期
ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。
最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。
课程推荐
以上是ASP.NET MVC5请求处理管道和生命周期的详细教程的详细内容。更多信息请关注PHP中文网其他相关文章!

vue3改了4个生命周期函数。Vue3组合式api取消了beforeCreated和created钩子函数,采用steup钩子代替,且里面不能使用this。Vue3里面的组件销毁的钩子函数由destroyed和beforeDestroy换成了beforeUnmount和unmounted。

通过管道进行文件读写:创建一个管道从文件读取数据并通过管道传递从管道中接收数据并处理将处理后的数据写入文件使用goroutine并发执行这些操作以提高性能

Servlet生命周期是指servlet从创建直到毁灭的整个过程,可分为3个阶段:1、初始化阶段,调用init()方法实现Servlet的初始化工作;2、运行阶段(处理请求),容器会为指定请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法;3、销毁阶段。

Go语言是一种开源的静态类型语言,它具有简洁、高效、可靠等特点,越来越受到开发者的喜爱。在Go语言中,变量是程序中最基本的数据存储形式,变量的作用域和生命周期对于程序的正确性和效率十分重要。变量的作用域指的是变量的可见性和可访问性,即在何处可以访问这个变量。在Go语言中,变量的作用域分为全局变量和局部变量。全局变量是定义在函数外部的变量,它可以被整个程序任何

Linux中的管道命令是一种强大的工具,可以将一个命令的输出作为另一个命令的输入,实现不同命令之间的数据传输与处理。本文将介绍Linux中管道命令的基础知识,以及一些常用的用法和代码示例。管道命令简介在Linux系统中,管道命令使用竖线符号(|)连接两个或多个命令,例如:command1|command2这样,command1的输出会作为command2

在当今信息化社会,计算机已经成为我们工作生活中不可或缺的工具。而作为一名熟练运用Linux系统的工作人员,如何利用Linux的强大功能提升工作效率是非常重要的。本文将重点介绍如何运用Linux中的管道(Pipes)这一重要功能来简化工作流程,提高工作效率。Linux的管道是一种特殊的文件类型,它可以将一个命令的输出直接传递给另一个命令,从而在不存储中间结果的

Go语言中函数和管道结合使用实现进程间通信。函数可将管道作为参数传递,通过管道发送或接收数据。管道是无缓冲通道,可用于在goroutine之间发送和接收数据,并支持无向和有向管道。发送数据时使用

使用管道实现超时机制:创建一个管道。创建一个goroutine来等待管道中的元素。在另一个goroutine中,在指定时间后关闭管道。使用select语句来在管道元素到达或超时时选择执行相应的操作。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

记事本++7.3.1
好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。