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.监听 ...
随机推荐
- 王之泰201771010131《面向对象程序设计(java)》第十三周学习总结
第一部分:理论知识学习部分 第11章 事件处理 11.1 事件处理基础 a)事件源(event source):能够产生事件的对象都可 以成为事件源,如文本框.按钮等.一个事件源是一个 能够注册监听 ...
- windows中cmd常用命令收集
1.经常会启动端口后忘关,需要杀端口的命令:查找端口占用命令 netstat -ano|findstr 端口例如 (8081) 杀端口: taskkill /pid xxxxx - ...
- MyBatis Generator 自定义生成注释
注释生成器 为了生成db里面的注释,必须自定义注释生成器 EmptyCommentGenerator: import org.mybatis.generator.api.CommentGenerato ...
- git push时报错:Updates were rejected because the tip of your current branch is behind
出现这样的问题是由于:自己当前版本低于远程仓库版本 有如下几种解决方法: 1.使用强制push的方法: git push -u origin master -f 这样会使远程修改丢失,一般是不可取的, ...
- 【BUAA-OO】第一单元作业总结
#OO第一单元作业总结 #确认存活,爱学习,爱北航,爱OO 一.三次作业分析 1.第一次作业 1.1 程序结构 对方法的度量: 类的内聚和相互间的耦合情况: 类图: 优缺点: 优点大概没什么优点,毕竟 ...
- pyqt5安装与pycharm配置
最近几天新入坑了python的GUI设计,回想一下我为什么会入门这个???好像是在知乎上看到你都用 Python 来做什么? 这篇文章,看到有人回答说将python打包成exe文件,然后就想把之前弄得 ...
- Pandas 基础(17) - to_datetime
这一节依然是关于时间的知识, 在平时的工作中, 有一个非常令我们恼火的就是时间的格式可以有很多种表达, 比如下面这张图, 我们看到同样是 2017年1月5日, 可以有很多种时间的格式, 我们需要先将格 ...
- redis 高可用
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实 ...
- 美团2017年CodeM大赛-初赛B轮-黑白树
https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...
- 基于gensim的LDA主题模型实现 一键式函数打包
def genlda(textlist,n): ticks = str(time.time()).replace('.','')[-6:-1] nn=str(n) dictionary = corpo ...