原文 https://docs.asp.net/en/latest/intro.html
by Daniel Roth, Rick Anderson and Shaun Luttin
章节
- 什么是 ASP.NET Core?
- 为什么重新设计出一个 AsP.NET Core?
- 应用解析
- 启动
- 服务
- 中间件
ASP.NET Core 是对 ASP.NET 的一次重大修改,基本是重新设计了。本篇向你介绍了ASP.NET Core 的一些新概念以及这些新的特性能对我们编写现在流行的WEB应用提供哪些帮助。
什么是 ASP.NET Core
ASP.NET Core 是一个开源、跨平台用于开发现在流行的基于云的网页应用的 .NET 框架。为了提供一个既能在云端部署又能在本地运行的这样牛逼的开发框架,我们几乎是从头构建了这个框架。ASP.NET 5 是由模块组件构成,可以让应用的资源开销很小,并且让我们的解决方案保持灵活性。ASP.NET 5 可以在 Windows、Mac和Linux这三个操作系统进行跨平台开发和运行。ASP.NET 5 是完全开源的,所有的源码都在 GitHub上。
为什么重新设计 ASP.NETCore
作为 .NET Framework 的一部分,ASP.NET从发布 的第一个预览版到现在已经差不多15年了,在这期间,成千上万的开发者用ASP.NET开发出了很多非常好的网页应用,同时,我们也改进和添加了很多功能到ASP.NET。
ASP.NET Core在架构上有非常大的改变,这样就能使框架变得非常简洁和模块化。ASP.NET Core 不再依赖于 System.Web.dll 这个程序集,而是基于一系列更细粒度、更细分的 NuGet 包,这样可以让你根据需要去优化你的应用,只包含一些你需要用到的 NuGet 包。The benefits of a smaller app surface area include tighter security, reduced servicing, improved performance, and decreased costs in a pay-for-what-you-use model.
使用 ASP.NET Core 你将获得一下基本的改进:
- 使用统一的模式构建 web UI 和 web APIs,
- 一个集成的现代浏览器端框架和开发工作流,
- 基于云服务的配置系统,
- 自带有依赖注入
- 新的轻量型和比较现代的HTTP请求管线,
- 可以部署到IIS,也可以把自己当作服务器来使用,
- 基于 .NET Core 构建,支持真正的 side-by-side 应用版本控制,
- Ship entiely as NuGet packages,
- 简化现代网页开发的工具,
- 跨平台,可以在 Windows,Mac,Linux 这三个平台编译和运行,
- 公开源代码并且的到社区关注。
应用解析
ASP.NET Core 应用只是一个在Main方法中创建了 web服务 的控制台应用程序:
using System; using Microsoft.AspNetCore.Hosting; namespace aspnetcoreapp { public class Program { public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseStartup<Startup>() .Build(); host.Run(); } } }
Main方法使用遵循建造者模式的 WebHostBuilder 类来构建 web 应用宿主。Web宿主构造器有方法可以用来指明使用哪种WEB服务(比如 UserKestrel 方法),和从哪个类启动(通过UserStart方法)。在上面的例子中,我们使用了Kestrel Web服务器,我们也可以指定使用其他的Web服务器。在下面的章节中,我们再谈谈 UserStartup 方法。WebHostBuilder 类提供了很多可选的方法,比如,UseIISIntegration 方法可以让我们把我们的web应用放到IIS 和 IIS Express 运行,UserContentRoot 方法可以用来指定内容的根目录。Build方法将构造一个 IWebHost类型的WEB应用服务器,Run方法开始启动应用并侦听HTTP请求。
启动
使用 WebHostBuilder类中的UserStartup方法来指定Web应用的启动类。
public class Program { public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseStartup<Startup>() .Build(); host.Run(); } }
尖括号中的 Startup 类就是我们用来处理请求管线和用来配置程序中需要用到的服务。Startup 类必须是公共类,还要包含下边的两个方法:
public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app) { } }
- ConfigureServices 方法定义了Web应用中需要用到的服务(详情看下边的“服务”章节)(比如说,ASP.NET MVC Core Framework,Entity Framework Core,Identify等等,都是我们所说的服务)。
- Configure 方法指明了在请求管线中需要用到的中间件。
- 更详细的信心请看 启动应用程序。
服务
在应用中,服务就是一个组件,用来实现资源共享。服务通过依赖注入的方式加入到系统中。ASP.NET 5 包含了一个简单的内置“控制反转容器(IoC)”,默认支持够构造注入。想要把这个默认的IoC容器替换成你喜欢的IoC容器也非常简单。除了松散耦合的好处,DI(依赖注入)还能使服务贯穿你的应用,比如:日志(Logging)在你整个Web应用的任何地方都可以使用,具体看“依赖注入”。
中间件
在ASP.NET Core 中,请求管道是由一个个中间件构成。在HTTP上下文中, 从逻辑的角度看,ASP.NET Core 中间件在Http上下文中是异步执行,然后在中间件序列中有选择地调用下一个中间件或者直接终止HTTP请求返回浏览器。通常,我们使用的中间件都依赖于NuGet包,统一在Startup类中的Configure方法中,通过IApplicationBuilder类的扩展方法来调用,扩展方法名通常写成 UseXXX。
ASP.NET 5 已经内置了一大波中间件:
你也可创建属于你自己的自定义中间件。
你也可以在 ASP.NET Core 中使用任何基于 OWIN 的中间件。详情请看 Open Web Interface for .NET (OWIN) 介绍。
服务器
ASP.NET Core 应用程序托管模型并没有直接侦听网络请求,而是依靠HTTP服务器将HTTP请求专递给他。专递过来的HTTP请求被包装成一个接口集合,在ASP.NET Core中,被封装到 HtppContext这个类中。在ASP.NET Core 中,已经包含了一个用托管代码写的跨平台的Web服务器叫Kestrel,当然,你也可以将你的ASP.NET Core程序运行在IIS和nginx中。
内容根目录
内容跟目录就是我们程序中用到的任何资源(比如,视图和网页内容)的根路径。默认情况下,内容根目录就是我们程序运行的根目录,当然,你也可以通过 WebHostBuilder 类指定另外的目录作为内容的根目录。
网页跟目录
网页根目录就是在我们的项目中,用来存放公共的静态文件的一个文件夹,静态文件就是我们写网页经常要用到的CSS、JS和图片等文件。默然情况下,静态文件中间件只处理网页根目录下的文件及子目录下的文件,网页根目录在项目中的 wwwroot 文件,当然,同样,你也可通过 WebHostBuilder 类指定另外一个文件夹作为网页根目录。
配置
ASP.NET Core 使用了新的配置模型来处理简单的“名称-值”数据。新的配置模型不在基于“System.Configuration”和 “web.config”文件,而是依赖于一组有序的配置提供器。ASP.NET Core内置的配置提供器支持多种格式的配置文件(XML,JSON,INI)和使用环境变量,使用环境变量,可以使基于环境的配置得以实现。你也可以根据需要,写出自定义的配置提供器。
详情请看 配置章节
环境
环境,比如说是生产环境还是产品环境,在ASP.NET Core中,可以通过环境变量来设置。详情请看 在多种环境下工作。
使用 ASP.NET Core MVC 来创建 Web UI 和 Web APIs
你可以使用MVC模式来创建一个可以分离和可测试的网页应用,详情请看 MVC 和 测试。
你可以写一个HTTP服务来支持多种返回格式和支持完全的内容协商。详情请看 格式化相应数据。
Razor提供了一个产品级的语言来创建视图
Tag Helpers 可以用来在 Razor 文件中用服务器端端代码来生成HTML元素。
You can creat HTTP Services with full suport for content negotiation using custom or built-in formatters (JSON,XML)。
模型绑定自动将HTTP请求中的数据映射到Action方法的参数。
模型验证自动执行客户端验证和服务端验证。
前端开发
ASP.NET Core 在设计上,无缝集成了多种前端框架,比如 AngularJS,KnockoutJS 和 Bootstrap,详情请看 前端开发。