Mvc请求的生命周期
ASP.NET Core : Mvc请求的生命周期
translation from http://www.techbloginterview.com/asp-net-core-the-mvc-request-life-cycle/

网站应用启动,同时触发Program.cs的main()方法。
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
译注:main方法中以新建对象的形式多级调用内部方法,调用方法返回对象的方法,连续调用,这里应该也是用这种方式实现一些流程的控制问题。
WebHostBuilder
WebHostBuiler类用于:为一个Web应用创建宿主(host)和配置宿主信息。WebHostBuilder是一个Web应用的启动的帮助类。UseKestrel()
这是一个(后期的)扩展方法,它配指明Kestrel是一个内部web服务器(web server)。Kestrel是一个开源的、跨平台的Asp.Net Core服务器。UseContentRoot()
这个方法指明当前目录作为Asp.net Core项目的根目录(src folder)。项目根目录决定了项目相关的一些个文件(mvc view文件,css文件,图片文件等)放在哪里。useIISIntegration()
这个方法指明,IIS是作为一个外部的web服务器(external web server)还是反向代理服务器(reverse proxy server)。UseStartup()
这个方法指明,web host使用哪个Startup class来开启网站应用。Startup class就像是.Net Framword的Global.asax(stack overflow, daday microsoft)一样,你可以在它里边配置请求管道(request pipeline[middleware])Run()
Run方法开启web应用,阻塞调用线程(进程),直到网站应用被关闭。
可以在Main()方法配置host时候,利用UseStartup()方法配置startup class。
(译注:完全没明白这里什么意思)此处原文:
The Run() method starts the web application and blocks the calling thread till the host is shutdown.The startup class can be configured using UseStartup() method at the time of configuring the host in the Main() method of Program class.ConfigureServices()
(wc!这个牛逼)
可以在这个方法里,用内建Ioc容器(built-in Ioc container)来注册你的各种依赖类(depandent classes),注册完后,可以用在程序的任何地方(目前个人理解,带有面向对象特性的“静态帮助类”)。你只需要把你需要的“类型”包含在你的类的构造器中即可使用,Ioc容器会自动完成相关注入的工作。Configure()
这个方法中可以注册 程序请求管道
内建Ioc容器提供了一个IApplicationBuilder实例(IApplicationBuilder Instance)可以在Configure方法中使用这个IApplicationBuilder实例,配置web应用的应用程序管道。(译注:个人暂时理解,应该是注册某些处理方法吧)
Asp.Net Core引入了一些中间件(middleware components)用来定义一个网络请求管道,注册到管道的代码逻辑在每个请求过程中都会被执行。通过引入你的web应用需要的中间件代码,来实现你自己程序的自定义需求。Middleware
基于.Net Core的Mvc应用,是建立在 中间件(Middleware) 这一概念上的。Middleware components 形成了程序HTTP管道的基本构建模块,包括:web server的文件服务和请求路由都是建立在中间件组件之上的。Routing Middleware
Mvc本质上其实就是对这一些路由中间件组件的一套具体实现,这些实现作为一组关卡(gateway)掌控着每个网络请求抵达框架(译注:猜测,这个应该指的是具体的业务逻辑实现代码)的路。
一个叫做MVC Route Handler的类,用它处理Http的访问请求(URL),每个请求会映射到一个确定的路由模型,然后这些请求就被转发到Mvc Frameword,也就是具体的业务逻辑代码。Controller Factory
它负责创建每个controller的类型的实例。Controller Action Invoker
(Invoker,invoke:调用,祈求,引起,恳求。1-you can invoke this faction from anywhere in the code. 2-should anyone be allowed to invoke any service?)
Controller Action Invoker这是组件用来查找、选择controller中恰当的Action方法,来处理request请求。在Invoker方法调用之前,模型绑定(Model Binding)在此之前发生,模型绑定就是把Http请求中的参数,绑定给Action方法的传入参数。(译注:这个参数的绑定和路由配置相关,这个很烦,需要再进一步查资料,弄明白它)Action Result
(Action的返回值)
Action Result 准备好后,就执行Result Execution这个处理过程(译注:应该是指对action返回值的处理)。MVC将Result的定义和执行区分了开来。
如果Result是一个View对象,View Engine启动渲染View对象。
如果Result不是View对象,Action result通常会执行产生默认的response。
Action Result(译注:这里是名词)产生的就是响应Http请求返回给调用方的Response结果。
译注:
Action Execution前后的两个Action Filter应该是可以类似Spring面向切面编程的意思,核心逻辑代码是根据也去来开发的,而一些验证、日志之类的东西是每个方法执行前后都需要统一执行一次的东西,这个大概就是这里Filter的意思吧。
Mvc请求的生命周期的更多相关文章
- ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6)
ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节. ①以IIS6.0为例 ...
- ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12)
在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6) ",体验了1-6关键环节,本篇继续. ⑦根据IsapiWorkerRequest对象,HttpRun ...
- ASP.NET MVC请求处理管道生命周期的19个关键环节(13-19)
在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12) ",体验了7-12关键环节,本篇继续. ⒀当请求到达UrlRoutingModule的时候,Url ...
- ASP.NET MVC 小牛之旅4:ASP.NET MVC的运行生命周期
ASP.NET MVC的运行生命周期大致分成三大过程:(1)网址路由对比. (2)运行Controller与Action. (3)运行View并回传结果. 4.1网址路由对比 当iis收到http请求 ...
- Minor【 PHP框架】2.第一个应用与请求的生命周期
框架Github地址:github.com/Orlion/Minor (如果觉得还不错给个star哦(^-^)V) 框架作者: Orlion 知乎:https://www.zhihu.com/peop ...
- [oldboy-django][2深入django]django一个请求的生命周期 + WSGI + 中间件
1 WSGI # WSGI(是一套协议,很多东西比如wsgiref, uwsgiref遵循这一套协议) - django系统本质 别人的socket(wsgiref或者uwsgiref) + djan ...
- Djngo 请求的生命周期
1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...
- 05.Django-form表单与请求的生命周期
Django中请求的生命周期 HTTP请求及服务端响应中传输的所有数据都是字符串 步骤 用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务器 url经过wsgi和中间件,到达路由映射表,在 ...
- Envoy 代理中的请求的生命周期
Envoy 代理中的请求的生命周期 翻译自Envoy官方文档. 目录 Envoy 代理中的请求的生命周期 术语 网络拓扑 配置 高层架构 请求流 总览 1.Listener TCP连接的接收 2.监听 ...
随机推荐
- 20171012--jq 遍历取值
1.父节点:parent(); 2.子节点:children(); 3.兄弟节点:siblings(); 4.用find:$("div").find("span" ...
- [MySQL] timestamp和datetime的区别
建表语句如下: create table strong_passwd_whitelist( id int unsigned not null auto_increment, email_id int ...
- threejs绕轴转,粒子系统,控制器操作等(二)
前言:threejs系列的第二篇文章,也是一边学习一边总结: 1,一个物体绕着另一个物体转动 上一篇文中主要是物体自转,为了描述一个一个物体绕另一个物体转,这里我描述了一个月球绕地球公转,并且自转的场 ...
- 【GO】【LiteIDE】
https://blog.csdn.net/qq_32034593/article/details/82986311 下载地址:https://www.golangtc.com/download/li ...
- 数据库连接超时:“The last packet successfully received from the server was xxx milliseconds ago”
产生的原因:应用方的数据库连接有效期时间,大于数据库自己设置的有效期. 解决方案: 一.修改druid配置(如果使用druid的话) spring.datasource.druid.validatio ...
- Linux(例如CentOS 7)打开TCP 22端口,基于SSH协议
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专 ...
- element-UI——el-table添加序号
转载自:https://www.cnblogs.com/langxiyu/p/10641060.html Part.1 示例 当我们想在 el-table 中添加序号列时,如下: <el-tab ...
- DAY 24继承与组合
一.继承 继承就是子类与父类形成的一种关系,可以让子类能直接从父类中获取属性与方法 优点:减少了类与类之间的代码冗余 语法: class 父类: # 父类是多个有共同点的普通类抽离共有属性与方法形成的 ...
- DAY 22初识面向对象
一.两种编程思想 1.面向过程编程 核心是'过程',过程指的是解决问题的步骤,就是先干什么再干什么 基于面向过程思想编写程序相当于写一条流水线,是一种机械式的思维方式 优点:解决问题的思路清晰,可以把 ...
- Python交互K线工具 K线核心功能+指标切换
Python交互K线工具 K线核心功能+指标切换 aiqtt团队量化研究,用vn.py回测和研究策略.基于vnpy开源代码,刚开始接触pyqt,开发界面还是很痛苦,找了很多案例参考,但并不能完全满足我 ...