ASP.NET Core - 开篇
由来
ASP.NET Core 是一个跨平台的高性能开源框架,ASP.NET Core第一次出现在我们眼前是以 ASP.NET vNext 命名的,然后又重新命名为ASP.NET 5,为了表明它并不是 ASP.NET 的简单迭代升级,最终命名为 ASP.NET Core。这是一个重新设计的Web开源框架,它最重要的特性是不再依赖IIS(依然可以部署在IIS上),支持跨平台,可以在任何平台上部署,这要得益于KestrelServer。
ASP.NET Core的性能和ASP.NET有着本质上的区别,因为大部分的ASP.NET被传统的System.Web库所限制,重新设计后的ASP.NET Core具有出色的性能和内存低占用,它的设计更符合现代化的开发思想(模块化),这些设计思想可以使ASP.NET Core整个应用程序更容易开发和维护。
ASP.NET Core本质上就是一个控制台程序,但是又跟Framework的控制台程序不同,因为它在启动的过程中注册了一系列服务,而且构建了一系列的中间件和MVC的路由形成管道监听Http请求和处理。
优点
ASP.NET Core 具有如下优点:
- 生成 Web UI 和 Web API 的统一场景。
- 针对可测试性进行构建。
- Razor Pages 可以使基于页面的编码方式更简单高效。
- 能够在 Windows、macOS 和 Linux 上进行开发和运行。
- 内置依赖项注入。
- 轻型的高性能模块化 HTTP 请求管道。
- 能够在 IIS、Nginx、Apache、Docker 上进行托管或在自己的进程中进行自托管。
.NET生态圈
我们可以看到当前的.NET生态圈如下:
为什么会有.NET Standard 这个东西?从上面的图来看,.NET主要分为三个部分: .NET FrameWork, .NET Core, Xamarin,目前要掌握这三部分的.NET,就意味着需要掌握三种不同的各自的基础类库用来写出在三种平台上运行的代码。这就是 .NET Standard 出现的缘由,以及它要处在的位置,这意味着开发者们只需要掌握以 .NET Standard 作为目标平台的基础类库,就可以在所有 .NET 平台上写出可运行的程序。
我们需要 .NET Standard 有两个理由:
- 对一致性的动力。 我们想达成一个共识,所有 .NET 平台都必须实现一组必需的 API 才可以获得进入 .NET 库生态系统的权限。
- 优秀的跨平台工具的基础。 我们希望一个简化的工具体验,你只需要选择一个版本号来指定所有 .NET 平台的通用部分。
版本差异
在经过了1.x的沉淀后,2.x版本趋向于风格上的稳定,有兴趣知道各个版本的一些特性和变化,可以参考ASPNET.Core各个版本差异以及新特性 ,有兴趣的还可以关注3.x的预览版。
环境
类似于ASP.NET依赖于Framework,ASP.NET Core 一样需要自己的Runtime和SDK,在Core2.x之后,需要下载VS2017才可进行开发
WebAPI
在ASP.NET Core体系中,不再有独立的WebAPI程序集,这个已经整合到MVC中
我们通过[ApiController]标签以及[Route("api/xx")]路由标志这是一个ApiController,这里需要注意的是官方推荐自定义的API基类最好继承ControllerBase,而不是直接继承Controller,Controller主要是给MVC用的。
MVC
ASP.NET Core MVC 框架是轻量级、开源、高度可测试的框架,并针对 ASP.NET Core 进行了优化。它提供一种基于开发模式的实现方式,用于生成可彻底分开管理事务的动态网站。 它提供对标记的完全控制,支持 TDD 友好开发并使用最新的 Web 标准。
MVC中加了些许新概念(如TagHelper,ViewComponents等),在实际开发过程中也和ASP.NET MVC有了较大的区别,后面在实际开发过程中讲更多讲解实际的应用。
重要对象和概念
在我们开始进入ASP.NET Core体系之前,我们先了解在ASP.NET Core体系中重要的几个对象和概念,后面我们会陆续碰到再仔细分解。
HttpContext:请求上下文,对应Http请求的整个生命周期
IHostingEnvironment:应用程序的运行的宿主环境配置信息
ILogger:日志接口
IConfiguration: 用于应用程序的配置
IServiceCollection:Aspnet Core原生的依赖注入容器,负责服务注册
IServiceProvider:负责解析注册的实例
IApplicationBuilder:用于构建请求管道
Middleware:中间件,管道的组成者
WebHost:应用宿主
.NET Core 或 .NET Framework的选择
在以下情况,对服务器应用程序使用 .NET Core:
- 用户有跨平台需求。
- 用户正在面向微服务。
- 用户正在使用 Docker 容器。
- 需要高性能和可扩展的系统。
- 需按应用程序提供并行的 .NET 版本。
在以下情况,对服务器应用程序使用 .NET Framework :
- 应用当前使用 .NET Framework(建议扩展而不是迁移)。
- 应用使用不可用于 .NET Core 的第三方 .NET 库或 NuGet 包。
- 应用使用不可用于 .NET Core 的 .NET 技术。
- 应用使用不支持 .NET Core 的平台。
在观望了1.x版本后,以及在2.x的一个实际应用经验中,秉着学习交流的想法,将个人的一些经验写下来,后续的文章将会把ASP.NET Core 中一些核心模块的源码进行解读(ASP.NET Core 的源代码已经全部托管在 GitHub 上)以及分享一些实际设计和应用经验,籍此机会和大家交流些许学习心得,希望大家一起进步。
本系列文章更多偏向于原理的解读和实际的应用,如果需要入门的帮助,建议从微软的入门教程 开始进行学习。
作者:lex-wu,原文链接:https://www.cnblogs.com/lex-wu/p/10604810.html