WebForm的请求流程:
1.首先进入HttpRuntime, 然后通过HttpApplicationFactory创建一个httpApplication对象
2.HTTP Application会创建该次请求的HttpContext(上下文), 里面有httprequest,httpResponse, HttpSessionState等
3.请求会经过Module,每一个module会对请求做不同的操作,就是管道事件,里面有19个管道事件,包含认证,授权,缓存检查,等等
4.请求会到HttpHandler,处理我们的逻辑。webForm每个页面都是继承"Page",而“Page”继承了“IHttpHandler”接口。
5.HttpHandler处理完后,又会回到Module,这时可以做一些实际工作后的事情。
我们很多事件,是不是有分前与后,就是这个道理。进行事件的前后拦截。
MVC请求流程:
-
IS 6以及IIS 7经典模式
早期的IIS版本中,IIS接收到一个请求时先判断请求类型,如果是静态文件直接由IIS处理;如果是一个ASP.NET请求类型,IIS把请求发送给IIS的扩展接口ASP.NET ISAPI DLL。ISAPI相当于ASP.NET应用的容器,这也是我们之前讲的。 -
IIS 7 集成模式
IIS 7和之前的版本区别比较大,IIS7直接把ASP.NET的运行管道流程集成到了IIS上。-
在IIS7中,ASP.NET请求处理管道Pipeline直接覆盖了IIS本身的管道Pipeline,IIS整个流程按照ASP.ENT管道流程执行,例如BeginRequest、AuthenticateRequest、…、EndRequest。而不是通过插件扩展(ISAPI)形式,不同的内容(jpg、html、php等)通过不同的插件来执行。
-
IIS7的优势体现在哪里?开发人员可以实现自定义的HttpModule或者HttpHandler,然后直接集成到IIS上,例如,我可以自定义一个JpgHttpHandler,然后通过IIS的Handler部署方式,把JpgHttpHandler部署到IIS上,处理所有的请求格式为*.jpg的请求。
-
1.首先进入HttpRuntime,一样通过HttpApplicationFactory创建HttpApplication
2.HttpApplication会创建该次请求的上下文
3.进入到urlRouteModule(路由系统),从http请求获取路由数据和对应的controller以及Action
4.匹配一个RouteData对象,调用MVCRouteHandler,请求HttpHandler
5.执行preocessRequest方法,使用ControllerBuilder获取ControllerFactory
6.调用Controller以及Action,执行
7.返回ActionResult
.net core请求流程:
- 负责创建IWebHost的宿主构造器IWebHostBuilder
- 代表宿主的IWebHost接口
- 用于构建请求管道的IApplicationBuilder
- 中间件衔接而成的RequestDelegate
- 代表Web Server的IServer接口
- 贯穿请求处理管道的请求上下文HttpContext
- 可以用来注册后台服务的IHostedService接口