ASP.NET Core 各版本特性简单整理
前言
简单整理了 ASP.NET Core 从1.0到5.0的变迁,不包括小版本, 内容主要来自 MS Docs。
介绍
ASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应用。 使用 ASP.NET Core,您可以:
- 生成 Web 应用和服务、物联网 (IoT)应用和移动后端。
- 在 Windows、macOS 和 Linux 上使用喜爱的开发工具。
- 部署到云或本地。
- 在.NET Core上运行。
相关:在 ASP.NET 4.x 和 ASP.NET Core 之间进行选择
v1.0
Release Time:2016.6.27
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/1.0.0
Announcing: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-1-0/
v1.1
Release Time:2016.11.17
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/1.1.0
Announcing: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-1-1/
Docs: ASP.NET Core 1.1 的新增功能
新增功能:
- URL 重写中间件
- 响应缓存中间件
- 查看组件即标记帮助程序
- MVC 型中间件筛选器
- 基于 Cookie 的 TempData 提供程序
- Azure App Service 日志记录提供程序
- Azure Key Vault 配置提供程序
- Azure 和 Redis 存储数据保护密钥存储库
- 适用于 Windows 的 WebListener 服务器(注:指 HTTP.sys 服务器)
- WebSockets 支持
v2.0
Release Time:2017.8.14
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/2.0.0
Announcing: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-2-0/
Docs: ASP.NET Core 2.0 中的新增功能
新增功能:
- Razor Pages
- ASP.NET Core 元包(注:即Microsoft.AspNetCore.All ,我喜欢称作全家桶,作用就是一把梭给你全部引用了相关的包,不用你发现没有的时候自己去找,方便是方便,就是把一堆没用到的也给引用了,项目加载速度也会受到影响)
- .NET Standard 2.0
- SPA 模板
- Kestrel 改进(添加大量服务器约束配置选项)
- WebListener 重命名为 HTTP.sys
- 默认启用防跨站请求攻击(CSRF)
- Razor 视图预编译
- Razor 支持 C# 7.1
v2.1
Release Time:2018.5.31
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/2.1.0
Announcing: https://devblogs.microsoft.com/aspnet/asp-net-core-2-1-0-now-available/
Docs: ASP.NET Core 2.1 的新增功能
新增功能
- SignalR(已针对 ASP.NET Core 2.1 重新编写 SignalR:新 JavaScript 客户端不具有 jQuery 依赖项,新紧凑型二进制协议基于 MessagePack等)
- Razor 类库(Razor Class Library)
- Identity UI 库
- HTTPS
- GDPR(注:刚出来时,很多人发现Cookie写入不了就是因为开启了它)
- 集成测试
- [ApiController], ActionResult
(注:ApiController 特性自带了请求内容验证拦截,这个当初也是坑了不少人,就我自己而言在实际使用中是将它关闭的,对于参数验证处理逻辑自己有一套逻辑) - IHttpClientFactory(注:官方出品,解决 HttpClient new多了,TIME_AWAIT 问题)
- Kestrel 默认传输不再基于 Libuv,而是基于托管的套接字
- 通用主机(注:即 HostBuilder ,在此时 ASP.NET Core 默认还是用的 WebHostBuilder,HostBuilder 可以用在不需要 ASP.NET Core ,但是又想使用 ASP.NET Core 的依赖注入,日志,配置等组件的项目)
v2.2
Release Time:2018.12.5
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/2.2.0
Announcing: https://devblogs.microsoft.com/aspnet/asp-net-core-2-2-available-today/
Docs: ASP.NET Core 2.2 的新增功能
新增功能:
- 端点路由(Endpoint Routing)
- 健康检查(HealthCheck)
- HTTP/2
- IIS 进程内承载
- SignalR Java 客户端
- CORS 改进
- 响应压缩(ASP.NET Core 2.2 可以使用 Brotli 压缩格式来压缩响应。)
- 提升 HttpClient 性能(通过改善连接池锁的争用)
注:.NET Core 2.2 新增了一个 startup hook 功能 https://github.com/dotnet/core-setup/blob/master/Documentation/design-docs/host-startup-hook.md
v3.0
Release Time:2019.9.24
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/v3.0.0
Announcing: https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazor-updates-in-net-core-3-0/
Docs: ASP.NET Core 3.0 的新增功能
新增功能:
- Blazor Server
- Blazor WebAssembly
- Razor 组件
- gRPC
- ASP.NET Core 和 SignalR 默认使用 System.Text.Json 来进行序列化
- ASP.NET Core 中默认不再使用 WebHostBuilder ,而是使用 HostBuilder(可以更好地将 ASP.NET Core 应用与非 Web 特定的其他服务器方案集成)
- Startup 类构造方法注入类型更改,只支持:IHostEnvironment,IWebHostEnvironment,IConfiguration
- 默认情况下启用 HTTP/2
- Kestrel:默认情况下禁用
AllowSynchronousIO
(同步IO),线程不足会导致应用崩溃,而同步 I/O API(例如HttpRequest.Body.Read
)是导致线程不足的常见原因 - 根据请求提供事件计数器
- 增强了端点路由,可以让框架(例如 MVC)与中间件配合使用
- ASP.NET Core 3.0 仅在 .NET Core 3.0 上运行(不再支持.NET Framework)
- 切换到 Newtonsoft.Json 需要自行安装依赖
性能改进
ASP.NET Core 3.0 包含了许多改进,可减少内存使用量并提高吞吐量:
- 降低了使用内置的依赖项注入容器来实现作用域服务时的内存使用量。
- 减少跨框架的分配,包括中间件方案和路由。
- 降低了 WebSocket 连接的内存使用量。
- 减少 HTTPS 连接的内存使用量并提高了其吞吐量。
- 新的优化和完全异步 JSON 序列化程序。
- 减少了窗体分析的内存使用量并提高了其吞吐量。
注:.NET Core 3.0 增加了 Winform 和 WPF 但在此时 Winform 的设计器还是预览版
v3.1
Release Time:2019.12.4
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/v3.1.0
Announcing: https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-core-3-1/
Docs: ASP.NET Core 3.1 的新增功能
新增功能:
-
Razor 组件的分部类支持
-
HTTP.sys 中对共享队列的支持
-
SameSite cookie(这可能会影响 AzureAd、OpenIdConnect 或 WsFederation 等身份验证场景)
-
Blazor 各种功能增强
v5.0
Release Time:2020.11.11
Release Note: https://github.com/dotnet/aspnetcore/releases/tag/v5.0.0
Announcing: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-in-net-5/
Docs: ASP.NET Core 5.0 的新增功能
新增功能:
-
ASP.NET Core MVC 和 Razor 改进
-
OpenAPI 规范默认开启
-
Blazor 性能改进、增加组件
-
SignalR 增加 Hub Filter,类似于 MVC Filter。支持并行调用,允许客户端一次调用多个Hub方法
-
自定义处理授权失败,使用由授权中间件调用的新 IAuthorizationMiddlewareResultHandler 接口可以更轻松地自定义处理授权失败
-
使用端点路由时的授权
-
Linux 上的 Kerberos 身份验证和 LDAP 的基于角色的访问控制
-
对 ASP.NET Core 项目运行 dotnet watch 将启动默认浏览器,并在对代码进行更改时自动刷新浏览器
-
控制台记录器格式化程序
-
JSON Console Logger
性能改进
- 显著减少了 HTTP/2 代码路径中的分配。
- 支持 Kestrel 中的 HTTP/2 响应标头的 HPack 动态压缩。 有关详细信息,请参阅标头表大小和 HPACK:HTTP/2 的静默杀手锏。
- 发送 HTTP/2 PING 帧:HTTP/2 有一种机制,用于发送 PING 帧以确保空闲连接仍然正常工作。 当使用经常空闲但仅可间歇查看活动的长生存期流(例如,gRPC 流)时,确保可行连接特别有用。
注:关于 .NET 5 命名 https://docs.microsoft.com/zh-cn/dotnet/core/dotnet-five
目前学习.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程