Mvc请求的生命周期

时间:2023-03-09 08:54:48
Mvc请求的生命周期

ASP.NET Core : Mvc请求的生命周期

translation from http://www.techbloginterview.com/asp-net-core-the-mvc-request-life-cycle/

Mvc请求的生命周期

网站应用启动,同时触发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.asaxstack 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的意思吧。