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.监听 ...
随机推荐
- Leaflet获取可视范围内4个顶点
//地图级别改变时发生 map.on("zoomend", function (e) { var zoom_val = e.target.getZoom(); map_drag() ...
- puppeteer实现线上服务器任意区域截图
整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文.而且笔者于十月一日将会举办人生大事--婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章. 关于服务端截图,这种使用场景非常少见,大多 ...
- 二分优化lis和STL函数
LIS:最长上升子序列: 这个题我们很显然会想到使用dp, 状态设计:dp[i]代表以a[i]结尾的LIS的长度 状态转移:dp[i]=max(dp[i], dp[j]+1) (0<=j< ...
- 复旦大学2018--2019学年第一学期高等代数I期末考试情况分析
一.期末考试成绩90分以上的同学(共21人) 周烁星(99).封清(99).叶雨阳(97).周子翔(96).王捷翔(96).张思哲(95).丁思成(94).陈宇杰(94).谢永乐(93).张哲维(93 ...
- Redis集群 - Sentinel与RAFT算法
引入 在主从模型中讲到 一旦Master宕机失效,需要手动将Slave角色提升为Master,否则这个子集群将不可用. 这个缺陷使得系统可用性大大降低.因此Redis专门提供了一个哨兵机制来实 ...
- EJB 笔记
EJB(Enterprise JavaBean)是J2EE服务器端的组件模型,EJB包括会话Bean(Session Bean).实体Bean(Entity Bean).消息驱动Bean(Messag ...
- Predict Referendum by sklearn package
Background Last day we talk about Python Basics in Chinese. Today, we will do data analysis with pyt ...
- C语言--第1次作业2.0版
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 经过一周C语言的正式课堂学习,不同于暑期时扒视频囫囵吞枣式学习,林丽老师的讲解详细异常,尽管已经学习了一部分内 ...
- leecode第二百三十八题(除自身以外数组的乘积)
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int len= ...
- vue项目知识点总结
一.vue中如何获取select被选中的id和对应的值. <!-- 下拉框 --> <div v-show="moreStore" class="sel ...