【译】.NET 7 预览版 1 中的 ASP.NET Core 更新

原文 | Daniel Roth

翻译 | 郑子铭

.NET 7 预览版 1 现已推出!这是 .NET 下一个主要版本的第一个预览版,其中将包括使用 ASP.NET Core 进行 Web 开发的下一波创新。

在 .NET 7 中,我们计划对 ASP.NET Core 进行广泛投资。以下是我们计划重点关注的一些领域:

性能:.NET 6 包含对 ASP.NET Core 的许多性能改进,我们将努力使 ASP.NET Core 在 .NET 7 中更快、更高效。

HTTP/3:HTTP/3 支持作为 .NET 6 中的预览功能提供。对于 .NET 7,我们希望完成它并使其成为默认启用的受支持功能。在未来的预览版中,您可以期待在我们的 HTTP/3 支持中看到高级 TLS 功能和更多性能改进。

最小 API:添加对端点过滤器和路由分组的支持,作为最小 API 的核心原语。通常还简化 API 的身份验证和授权配置。

gRPC:我们正在投资 gRPC JSON 转码。此功能允许 gRPC 服务像带有 JSON 请求和响应的 RESTful HTTP API 一样被调用。

SignalR:添加对强类型客户端的支持并从客户端调用返回结果。

Razor:我们将对 Razor 编译器进行各种改进,以提高性能、弹性并促进改进的工具。

Blazor:在完成对 .NET MAUI、WPF 和 Windows 窗体的 Blazor Hybrid 支持后,我们将对 Blazor 进行广泛的改进,包括:

新的 .NET WebAssembly 功能:混合模式 AOT、多线程、Web 加密。

增强的热重载支持。

数据绑定改进。

更灵活的预渲染。

更好地控制 Blazor 服务器电路的生命周期。

改进了对微前端的支持。

MVC:对端点路由、链接生成和参数绑定的改进。

Orleans:ASP.NET Core 和 Orleans 团队正在研究进一步调整和集成 Orleans 分布式编程模型与 ASP.NET Core 的方法。 Orleans 4 将与 .NET 7 一起发布,并专注于简单性、可维护性和性能,包括人类可读的流标识和新的优化、版本容忍的序列化程序。

有关为 .NET 7 计划的特定 ASP.NET Core 工作的更多详细信息,请参阅 GitHub 上针对 .NET 7 的完整 ASP.NET Core 路线图。

.NET 7 Preview 1 是众多 .NET 7 预览版中的第一个,为 2022 年 11 月的 .NET 7 版本做准备。

我在最近一集 On .NET 中加入了 James Montemagno,以分解 .NET 7 和 .NET 7 中的 ASP.NET Core 中的所有内容:

以下是此预览版中新增内容的摘要:

最小的 API 改进:

IFormFile 和 IFormFileCollection 支持

将请求正文绑定为 Stream 或 PipeReader

JSON 选项配置

SignalR 客户端源生成器

支持 MVC 视图和 Razor 页面中的可为空模型

在验证错误中使用 JSON 属性名称

改进了 dotnet watch 的控制台输出

将 dotnet watch 配置为始终重新启动以进行粗鲁的编辑

在 ValidationAttribute 中使用依赖注入

更快的标头解析和写入

gRPC JSON 转码

开始使用

要开始使用 .NET 7 Preview 1 中的 ASP.NET Core,请安装 .NET 7 SDK。

如果您在 Windows 上使用 Visual Studio,我们建议安装最新的 Visual Studio 2022 预览版。 Visual Studio for Mac 对 .NET 7 预览的支持尚不可用,但即将推出。

要安装最新的 .NET WebAssembly 构建工具,请从提升的命令提示符处运行以下命令:

dotnet workload install wasm-tools 升级现有项目

要将现有的 ASP.NET Core 应用从 .NET 6 升级到 .NET 7 Preview 1:

将您的应用程序的目标框架更新为 net7.0。

将所有 Microsoft.AspNetCore.* 包引用更新到 7.0.0-preview.1.*。

将所有 Microsoft.Extensions.* 包引用更新到 7.0.0-preview.1.*。

另请参阅 .NET 7 的 ASP.NET Core 中的的完整列表。

最小的 API 改进 IFormFile 和 IFormFileCollection 支持

您现在可以使用 IFormFile 和 IFormFileCollection 在最少的 API 中处理文件上传:

app.MapPost("/upload", async(IFormFile file) => { using var stream = System.IO.File.OpenWrite("upload.txt"); await file.CopyToAsync(stream); }); app.MapPost("/upload", async (IFormFileCollection myFiles) => { ... });

将此功能与身份验证一起使用需要防伪支持,但尚未实现。我们的 .NET 7 路线图包含对最小 API 的防伪支持。当请求包含 Authorization 标头、客户端证书或 cookie 标头时,绑定到 IFormFile 或 IFormFileCollection 当前被禁用。我们将在完成防伪支持工作后立即解决此限制。

感谢 @martincostello 贡献此功能。

将请求正文绑定为 Stream 或 PipeReader

您现在可以将请求正文绑定为 Stream 或 PipeReader,以有效地支持用户必须摄取数据并将其存储到 blob 存储或将数据排队到队列提供程序(Azure 队列等)以供以后处理的场景工作者或云功能。以下示例显示了如何使用新绑定:

app.MapPost("v1/feeds", async (QueueClient queueClient, Stream body, CancellationToken cancellationToken) => { await queueClient.CreateIfNotExistsAsync(cancellationToken: cancellationToken); await queueClient.SendMessageAsync(await BinaryData.FromStreamAsync(body), cancellationToken: cancellationToken); });

使用 Stream 或 PipeReader 时,需要考虑以下几点:

摄取数据时,Stream 将是与 HttpRequest.Body 相同的对象。

默认情况下不缓冲请求正文。读取正文后,它不可回退(您不能多次读取流)。

Stream/PipeReader 在最小操作处理程序之外不可用,因为底层缓冲区将被释放和/或重用。

JSON 选项配置

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwpzf.html