原文:IntroductiontoASP.NETCore作者:DanielRoth、RickAnderson、ShaunLuttin翻译:江振宇(KerryJiang)校对:许登洋(Seay)、魏美娟(初见)、姚阿勇(Mr.Yao)
ASP.NETCore是对ASP.NET的一次意义重大的重构。本文介绍了ASP.NETCore中的一些新概念,并且解释了它们如何帮助你开发现代的Web应用程序。
章节:
什么是ASP.NETCore?
为什么构建ASP.NETCore?
应用程序剖析
Startup
服务(Services)
中间件(Middleware)
服务器(Servers)
内容根目录(Contentroot)
Web根目录(Webroot)
配置(Configuration)
环境(Environments)
使用ASP.NETCoreMVC构建webUI和webAPIs
客户端开发
后续步骤
什么是ASP.NETCore?ASP.NETCore是一个新的开源和跨平台的框架,用于构建如Web应用、物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序。ASP.NETCore应用可运行于.NETCore和完整的.NETFramework之上。构建它的目的是为那些部署在云端或者内部运行(on-premises)的应用提供一个优化的开发框架。它由最小开销的模块化的组件构成,因此在构建你的解决方案的同时可以保持灵活性。你可以在Windows、Mac和Linux上跨平台的开发和运行你的ASP.NETCore应用。ASP.NETCore开源在GitHub上。
为什么构建ASP.NETCore?ASP.NET的首个预览版作为.NETFramework的一部分发布于5年前。自那以后数百万的开发者用它开发和运行着众多非常棒的Web应用,而且在这么多年之间我们也为它增加和改进了很多的功能。
ASP.NETCore有一些架构上的改变,这些改变会使它成为一个更为精简并且模块化的框架。ASP.NETCore不再基于System.Web.dll。当前它基于一系列颗粒化的,并且良好构建的NuGet包。这一特点能够让你通过仅仅包含需要的NuGet包的方法来优化你的应用。一个更小的应用程序接口通过“只为你需要的功能付出”(pay-for-what-you-use)的模型获得的好处包括更可靠的安全性、简化服务、改进性能和减少成本。
通过ASP.NETCore,你可以获得的改进:
一个统一的方式用于构建webUI和webAPIs
集成现代的客户端开发框架和开发流程
一个适用于云的,基于环境的配置系统
内置的依赖注入
新型的轻量级的、模块化HTTP请求管道
运行于IIS或者自宿主(self-host)于你自己的进程的能力
基于支持真正的side-by-side应用程序版本化的.NETCore构建
完全以NuGet包的形式发布
新的用于简化现代web开发的工具
可以在Windows、Mac和Linux上构建和运行跨平台的ASP.NET应用
开源并且重视社区
应用程序剖析一个ASP.NETCore应用其实就是一个在其Main方法中创建一个web服务器的简单控制台应用程序:
usingSystem;usingMicrosoft.AspNetCore.Hosting;namespaceaspnetcoreapp{publicclassProgram{publicstaticvoidMain(string[]args){varhost=newWebHostBuilder().UseKestrel().UseStartupStartup().Build();host.Run();}}}Main调用遵循builder模式的WebHostBuilder,用于创建一个web应用程序宿主。这个builder有些用于定义web服务器(如UseKestrel)和startup类型(UseStartup)的方法。在上面的示例中,web服务器Kestrel被启用,但是你也可以指定其它web服务器。我们将会在下一节展示更多关于UseStartup的内容。WebHostBuilder提供了一些可选方法,其中包括寄宿在IIS和IISExpress中的UseIISIntegration和用于指定根内容目录的UseContentRoot。Build和Run方法构建了用于宿主应用程序的IWebHost然后启动它来监听传入的HTTP请求。
StartupWebHostBuilder的UseStartup方法为你的应用指定了Startup类。
publicclassProgram{publicstaticvoidMain(string[]args){varhost=newWebHostBuilder().UseKestrel().UseStartupStartup()//手工高亮.Build();host.Run();}}Startup类是用来定义请求处理管道和配置应用需要的服务。Startup类必须是公开的(public)并且包含如下方法:
publicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){}publicvoidConfigure(IApplicationBuilderapp){}}ConfigureServices定义你的应用所使用的服务(在下面查看服务(Services))(例如ASP.NETMVCCoreframework、EntityFrameworkCore、Identity等等)
Configure定义你的请求管道中的中间件(middleware)
更多内容请参考:ApplicationStartup
服务(Services)服务是应用中用于通用调用的组件。服务通过依赖注入获取并使用。ASP.NETCore内置了一个简单的控制反转(IoC)容器,它默认支持构造器注入,并且可以方便的替换成你自己选用的IoC容器。由于它的松耦合特性,依赖注入(DI)使服务在整个应用中都可以使用。例如,Logging在你整个应用中都可用。查看DependencyInjection获取更多信息。
中间件(Middleware)在ASP.NETCore中,你可以使用Middleware构建你的请求处理管道。ASP.NETCore中间件为一个HTTPContext执行异步逻辑,然后按顺序调用下一个中间件或者直接终止请求。一般来说你要使用一个中间件,只需要在Configure方法里调用IApplicationBuilder上一个对应的UseXYZ扩展方法。
ASP.NETCore带来了丰富的内置中间件:
静态文件(Staticfiles)
路由(Routing)
身份验证(Authentication)
你也可以创建你自己的自定义中间件。
你也可以在ASP.NETCore中使用任何基于OWIN的中间件。查看OWIN获取更多信息。
服务器(Servers)ASP.NETCore托管模式并不直接监听请求;而是依赖于一个HTTPserver实现来转发请求到应用程序。这个被转发的请求会以一组feature接口的形式被包装,然后被应用程序组合到一个HTTPContext中去。ASP.NETCore包含了一个托管的跨平台web服务器,被称为Kestrel,它往往会被运行在一个如IIS或者nginx的生产web服务器之后。
内容根目录(Contentroot)内容根目录是应用程序所用到的所有内容的根路径,例如它的views和web内容。内容根目录默认与宿主应用的可执行程序的应用根目录相同;一个替代的地址可以通过WebHostBuilder来设置。
Web根目录(Webroot)你的应用的Web根目录(Webroot)是你项目中所有公共的、静态的资源,如css、js和图片文件的目录。静态文件中间件将默认只发布Web根目录(Webroot)和其子目录中的文件。Web根目录(Webroot)默认为/鍖椾含娌荤枟鐧界櫆椋庡摢閲屾瑙?鍖椾含鏈鏉冨▉鐧界櫆椋庡尰闄?