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.监听 ...
随机推荐
- deep learning入门:感知机
权重和偏置 import numpy as np # 求x1 and x2 def AND(x1, x2): x = np.array([x1, x2]) w = np.array([0.5, 0.5 ...
- Java后台判断是否是ajax请求,并进行处理
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...
- 常见的JavaWeb安全问题及修复
1.SQL注入:程序向后台数据库传递SQL时,用户提交的数据直接拼接到SQL语句中并执行,从而导入SQL注入攻击. 字符型注入:黑色部分为拼接的问题参数 select * from t_user wh ...
- Xiangqi(简单模拟)
4746: Xiangqi 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 15 测试通过:2 描述 Xiangqi i ...
- 模板引擎ejs入门学习
1:利用 NPM 安装 EJS 很简单 npm install ejs 2:安装完成肯定就是使用了 var template = ejs.compile(str, options); template ...
- web.xml 设置字符编码
个人理解 就是为了防止在前端输入的数据到了后台发生乱码 直接复制到web.xml里面就可以使用 亲测 能用!!! <!-- 前端过滤器设置字符编码 --> <filter> ...
- redis -memcahe
tomcat自动化集成 https://blog.51cto.com/ellenv/1932817 Redis与Memcache对比:1.Memcache是一个分布式的内存对象缓存系统而redis是可 ...
- 4 - BFS & Topological Algorithm
615. Course Schedule https://www.lintcode.com/problem/course-schedule/description?_from=ladder&& ...
- 多重线性回归 (multiple linear regression) | 变量选择 | 最佳模型 | 基本假设的诊断方法
P133,这是第二次作业,考察多重线性回归.这个youtube频道真是精品,用R做统计.这里是R代码的总结. 连续变量和类别型变量总要分开讨论: 多重线性回归可以写成矩阵形式的一元一次回归:相当于把多 ...
- Python自学:第三章 使用del语句删除元素
motorcycles = ["honda", "yamaha", "suzuki"] print(motorcycles) del mot ...