期末告一段落,有一周的时间给我折腾折腾,那就继续dotNet Core吧,先列一下文章列表。
ASP.NET Core
是一个跨平台的高性能开源框架,用于生成基于云且连接 Internet 的新式应用程序。
使用 ASP.NET Core
,可以:
.NET Core
或 .NET Framework
上运行。数百万开发人员在使用(并继续使用)ASP.NET Core
来创建 Web 应用。ASP.NET Core
是重新设计的ASP.NET Core
,对体系结构进行了更改,提供更精简的模块化框架。
ASP.NET Core
具有如下优点:
.NET Core
上运行,支持真正的并行应用版本控制。ASP.NET Core
完全作为 NuGet 包的一部分提供。 这可优化应用,使其只包含需要的 NuGet 包。 较小的应用图面区域的优势包括:提升安全性、减少维护和提高性能。
ASP.NET Core
应用其实就是在Main中创建一个Web服务器的简单控制台应用程序。
如上图,Main方法
调用遵循builder
模式的WebHostBuilder
,用于创建一个Web应用程序的宿主。这个builder
具有定义Web服务器(如UseKestrel
)和startup类型(UseStartup
)的方法。
Build
和Run
方法构建了用于宿主应用程序的IWebHost
,然后启动它来监听传入的HTTP请求。
上面的Main方法中有写到WebHostBuilder
的UseStartup
方法为应用制定了Startup类
。
Startup类
可以用来定义请求和处理管道和配置应用需要的服务。Starup
类必须是public
的,内容实例如下:
在ASP.NET Core
中,Startup类
提供了应用程序的入口并充当为应用程序的启动点。ASP.NET
会在主程序集中搜索名为Startup
的类,Startup
类能够选择性地在构造函数中接受通过依赖注入提供的依赖项,将要被配置的应用程序的方法应定义于Stratup
类的构造函数中,如Configuration
。Startup
类必须定义Configure
方法,可以选择定义一个ConfigureServices
方法,这些方法在应用程序启动时被调用。
Configure
方法用于定义请求管道中的中间件,即指定ASP.NET
应用程序将如何响应每一个HTTP请求,简言之,可以配置每个请求都接收相同的响应。事实上,大多数应用程序都需要更复杂的管道配置并将其封装与中间件(middleware)中,并通过扩展方法添加到IApplicationBuilder
上。
ConfigureServices
方法用于定义应用所使用的服务(如ASP.NET MVC Core Framework
,Entity Framework Core
,Identity
等)。
服务是应用中用于通用调用的组件。服务通过依赖注入获取并使用。ASP.NET Core内置了一个简单的控制反转(IoC)容器,它默认支持构造器注入,并且可以方便的替换成自己的选用的IoC容器。由于他的松耦合性,依赖注入(DI)使服务在整个应用中都可以使用。例如,Logging在整个应用中都可用。
在ASP.NET Core
中个可以使用中间件构建请求处理管道。ASP.NET Core
中间件为一个HttpContext
执行异步逻辑,然后按顺序调用下一个中间件或者直接终止请求。一般来说,要使用一个中间件,只需要在Configure
方法中调用IApplicationBuilder
上一个对应的UseXYZ
扩展方法即可。
ASP.NET Core
带来了丰富的内置中间件:
可以创建自定义中间件,或者在ASP.NET Core
中使用任何基于OWIN
的中间件。
ASP.NET Core
托管模式并不会直接监听请求,而是依赖一个HTTP Server
实现来转发请求到应用程序。这个转发的请求会以feature
接口的形式被包装,然后被应用程序组合到一个HttpContext
中去。ASP.NET Core
包含了一个托管的跨平台Web服务器:Kestrel
,通常运行在一个IIS或者Nginx的生产Web服务器之后。