Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【译】.NET 7 预览版 1 中的 ASP.NET Core 更新

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

原创
作者头像
郑子铭
发布于 2022-03-08 13:15:07
发布于 2022-03-08 13:15:07
4.2K00
代码可运行
举报
运行总次数:0
代码可运行

原文 | 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 构建工具,请从提升的命令提示符处运行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 中处理文件上传:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.MapPost("/upload", async(IFormFile file) =>
{
    using var stream = System.IO.File.OpenWrite("upload.txt");
    await file.CopyToAsync(stream); 
});
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.MapPost("/upload", async (IFormFileCollection myFiles) => { ... });

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

感谢 @martincostello 贡献此功能。

将请求正文绑定为 Stream 或 PipeReader

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 选项配置

我们正在引入一个新的更简洁的 API,ConfigureRouteHandlerJsonOptions,为最小的 API 端点配置 JSON 选项。这个新的 API 避免了与 Microsoft.AspNetCore.Mvc.JsonOptions 的混淆。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var builder = WebApplication.CreateBuilder(args);
builder.Services.ConfigureRouteHandlerJsonOptions(options =>
{
    //Ignore Cycles
    options.SerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; 
});   

SignalR 客户端源生成器

感谢@mehmetakbulut 的贡献,我们为 SignalR 添加了一个新的客户端源生成器。

SignalR 客户端源生成器根据您定义的接口生成强类型的发送和接收代码。您可以在客户端上重用来自强类型 SignalR 集线器的相同接口来代替松散类型的 .On("methodName", ...) 方法。同样,您的集线器可以为其方法实现一个接口,并且客户端可以使用该相同接口来调用集线器方法。

要使用 SignalR 客户端源生成器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[AttributeUsage(AttributeTargets.Method)]
internal class HubServerProxyAttribute : Attribute
{
}

[AttributeUsage(AttributeTargets.Method)]
internal class HubClientProxyAttribute : Attribute
{
}
  • 为您的项目添加一个静态分部类,并使用 [HubClientProxy] 和 [HubServerProxy] 属性编写静态分部方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
internal static partial class MyCustomExtensions
{
    [HubClientProxy]
    public static partial IDisposable ClientRegistration<T>(this HubConnection connection, T provider);

    [HubServerProxy]
    public static partial T ServerProxy<T>(this HubConnection connection);
}
  • 使用代码中的部分方法!
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface IServerHub
{
    Task SendMessage(string message);
    Task<int> Echo(int i);
}

public interface IClient
{
    Task ReceiveMessage(string message);
}

public class Client : IClient
{
    // Equivalent to HubConnection.On("ReceiveMessage", (message) => {});
    Task ReceiveMessage(string message)
    {
        return Task.CompletedTask;
    }
}

HubConnection connection = new HubConnectionBuilder().WithUrl("...").Build();
var stronglyTypedConnection = connection.ServerProxy<IServerHub>();
var registrations = connection.ClientRegistration<IClient>(new Client());

await stronglyTypedConnection.SendMessage("Hello world");
var echo = await stronglyTypedConnection.Echo(10);

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

我们启用了定义一个可为空的页面或视图模型来改进在 ASP.NET Core 应用中使用空状态检查时的体验:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@model Product?

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

当模型验证生成 ModelErrorDictionary 时,默认情况下它将使用属性名称作为错误键(“MyClass.PropertyName”)。模型属性名称通常是一个实现细节,这会使它们难以从单页应用程序中处理。您现在可以将验证配置为使用相应的 JSON 属性名称,而不是使用新的 SystemTextJsonValidationMetadataProvider(或使用 Json.NET 时的 NewtonsoftJsonValidationMetadataProvider)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
services.AddControllers(options =>
{
    options.ModelMetadataDetailsProviders.Add(new SystemTextJsonValidationMetadataProvider())
});

改进了 dotnet watch 的控制台输出

我们清理了 dotnet watch 的控制台输出,以更好地与 ASP.NET Core 的注销保持一致,并在😮表情符号😍.中脱颖而出。

以下是新输出的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:BlazorApp> dotnet watch
dotnet watch 🔥 Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload.
  💡 Press "Ctrl + R" to restart.
dotnet watch 🔧 Building...
  Determining projects to restore...
  All projects are up-to-date for restore.
  You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy
  BlazorApp -> C:UsersdarothDesktopBlazorAppbinDebugnet7.0BlazorApp.dll
dotnet watch 🚀 Started
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7148
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5041
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:UsersdarothDesktopBlazorApp
dotnet watch ⌚ File changed: .PagesIndex.razor.
dotnet watch 🔥 Hot reload of changes succeeded.
info: Microsoft.Hosting.Lifetime[0]
      Application is shutting down...
dotnet watch 🛑 Shutdown requested. Press Ctrl+C again to force exit.

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

通过将 DOTNET_WATCH_RESTART_ON_RUDE_EDIT 环境变量设置为 true,将 dotnet watch 配置为始终在不提示粗鲁编辑(无法热重新加载的编辑)的情况下重新启动。

将服务注入 Blazor 中的自定义验证属性

您现在可以将服务注入 Blazor 中的自定义验证属性。 Blazor 将设置 ValidationContext,以便它可以用作服务提供者。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SaladChefValidatorAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var saladChef = validationContext.GetRequiredService<SaladChef>();
        if (saladChef.ThingsYouCanPutInASalad.Contains(value.ToString()))
        {
            return ValidationResult.Success;
        }
        return new ValidationResult("You should not put that in a salad!");
    }
}

// Simple class configured as a service for dependency injection
public class SaladChef
{
    public string[] ThingsYouCanPutInASalad = { "Strawberries", "Pineapple", "Honeydew", "Watermelon", "Grapes" };
}

感谢@MariovanZeist 的贡献!

更快的标头解析和写入

我们对 HTTP/2 和 HTTP/3 的标头解析和写入性能进行了多项改进。有关详细信息,请参阅以下拉取请求:

gRPC JSON 转码

gRPC JSON 转码允许 gRPC 服务像 RESTful HTTP API 一样使用。配置完成后,gRPC JSON 转码允许您使用熟悉的 HTTP 概念调用 gRPC 方法:

  • HTTP 动词
  • URL参数绑定
  • JSON 请求/响应

当然 gRPC 也可以继续使用。用于 gRPC 服务的 RESTful API。没有重复!

ASP.NET Core 使用名为 gRPC HTTP API 的库对此功能提供实验性支持。对于 .NET 7,我们计划将此功能作为 ASP.NET Core 的受支持部分。此功能尚未包含在 .NET 7 中,但您可以试用现有的实验包。有关更多信息,请参阅 gRPC HTTP API 入门文档

给予反馈

我们希望您喜欢 .NET 7 中的 ASP.NET Core 预览版,并且您对我们的 .NET 7 路线图和我们一样兴奋!我们很想听听您对此版本的体验以及您对路线图的看法。通过在 GitHub 上提交问题并评论路线图问题,让我们知道您的想法。

感谢您试用 ASP.NET Core!

原文链接

ASP.NET Core updates in .NET 7 Preview 1

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新。
AI.NET 极客圈
2019/07/19
23.3K0
【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新
我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版。针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的博文进行了详细的介绍。具体的可以关注“汪宇杰博客”公众号,或者我的“DotNetCore实战”公众号然后在历史文章里面进行查阅。而我们这篇文章将会介绍本次更新中对ASP.NET Core和Blazor所做的更新。当然本文的大部分内容翻译自ASP.NET的首席项目经理Daniel Roth的介绍。
依乐祝
2019/06/17
6.9K0
[翻译] ASP.NET Core 3.0 的新增功能
全文翻译自微软官方文档英文版 What's new in ASP.NET Core 3.0
梁规晓
2019/09/26
7.1K0
ASP.NET Core 6.0对热重载的支持
.NET 热重载技术支持将代码更改(包括对样式表的更改)实时应用到正在运行的程序中,不需要重启应用,也不会丢失应用状态。
沙漠尽头的狼
2022/04/18
2K0
ASP.NET Core 6.0对热重载的支持
ASP.NET Core 各版本特性简单整理
简单整理了 ASP.NET Core 从1.0到5.0的变迁,不包括小版本, 内容主要来自 MS Docs。
晓晨
2021/01/21
3.5K0
在ASP.NET CORE 2.0使用SignalR技术
上次讲SignalR还是在《在ASP.NET Core下使用SignalR技术》文章中提到,ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划中。时间过得很快,MS已经发布了.NET Core 2.0 Preview 2 预览版,距离正式版已经不远了,上文中也提到过在ASP.NET Core 2.0中的SignalR将做为重要的组件与MVC等框架一起发布。它的开发团队也兑现了承诺,使用TypeScript对它的javascript客户端进行重写,服务端方面也会贴近ASP.NET Core的开发方式,比如会集成到ASP.NET Core依赖注入框架中。
yoyofx
2018/09/05
1K0
.NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!
这是我们计划在今年晚些时候发布的最终.NET 8版本之前的两个候选版本中的第一个。大部分计划中的功能和变更都包含在这个候选版本中,可以供您尝试使用。您可以在文档中找到完整的ASP.NET Core在.NET 8中的新功能列表[1]。一些领域(尤其是Blazor)仍然有一些重大的变更待完成,我们预计将在下一个.NET 8候选版本中完成这些变更。
用户10786849
2023/10/13
5210
.NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!
在.NET 8 RC1 版本中 MAUI、ASP.NET Core 和 EF8 的新特性
从年初2 月份发布第一个预览版,经历7个预览版后,Microsoft 西雅图时间9月13日发布了 .NET 8  RC 1: https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-rc1/[1], 这是该框架在 11 月初正式发布之前的两个版本中的第一个。 .NET 8 RC1 是在生产中受支持,随着开发团队修复和完善内容,该框架基本上已经准备好了新的和令人兴奋的功能,以便在 11 月 14 日开始的 .NET Conf 2023 [2]期间正式发布RTM。
张善友
2023/09/14
7650
在.NET 8 RC1 版本中 MAUI、ASP.NET Core 和 EF8 的新特性
创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性
本文首发于《创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性》
Rector
2021/08/19
5.5K0
创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性
NET 8 预览版 2 亮点是Blazor
.NET 团队在2023年3月14日发布了.NET 8预览版2,博客文章地址:https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-2/, 亮点是了对Blazor的一些改进。
张善友
2023/03/16
1.4K0
NET 8 预览版 2 亮点是Blazor
.NET 9发布的最后一个预览版Preview 7, 下个月发布RC
微软在2024年8月9日 发布了.NET 9 Preview 7[1],这是它在2024 年 11 月 12 日 RTM 之前进入发布候选阶段之前的最后预览版, 将在.NET Conf 2024 一起发布[3]。该预览版也于也与 Visual Studio 2022 17.12 预览版1一起发布,现在可以直接通过 Visual Studio 安装程序安装 .NET 9。还可以将 Visual Studio Code 和 C# Dev Kit[2] 扩展与 .NET 9 一起使用。
张善友
2025/02/04
930
.NET 9发布的最后一个预览版Preview 7, 下个月发布RC
.NET 10首个预览版发布:重大改进与新特性概览!
.NET 团队于2025年2月25日发布博文,宣布推出 .NET 10 首个预览版更新,重点改进.NET Runtime、SDK、Libraries 、C#、ASP.NET Core、Blazor 和.NET MAUI 等。
追逐时光者
2025/03/05
5590
.NET 10首个预览版发布:重大改进与新特性概览!
官宣 .NET 7 预览版3
很高兴地宣布,我们发布了.NET 7 预览版3。.NET 7的第三个预览版包括了对可观察性、启动时间、codegen、GC regions、本地AOT编译等方面的增强。您现在就可以获取并开始尝试新功能,包括:
郑子铭
2022/06/10
7330
官宣 .NET 7 预览版3
Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
本文主要介绍了SignalR Core在ASP.NET Core中的新特性,包括支持WebSocket、长轮询、消息推送、观察者模式以及二进制数据的传输等。同时,还介绍了一些SignalR Core的实用工具,包括Hub、SignalR协议、SignalR观察者模式以及SignalR二进制数据传输等。通过本文的介绍,读者可以快速了解SignalR Core的基本特性和应用方法。
GuZhenYin
2018/01/04
1.7K0
Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
ASP.NET Core 6 的性能改进
受到 由Stephen Toub 发布的关于 .NET 性能的博客的启发,我们正在写一篇类似的文章来强调ASP.NET Core 在6.0 中所做的性能改进。
郑子铭
2022/03/22
1.9K0
ASP.NET Core 6 的性能改进
.NET周报【12月第2期 2022-12-15】
https://mp.weixin.qq.com/s/HJYnBE-7wbvkAYHxQaq3eQ
InCerry
2023/03/08
2.3K0
.NET周报【12月第2期 2022-12-15】
.NET 9 预览版6发布
微软发布了 .NET 9 的第 6 个预览版,此版本包括对运行时、SDK、.NET MAUI、ASP.NET Core 和 C# 的更新,预览版没有包含太多新的主要功能或特性,因为已接近 .NET 9 开发的最后阶段,该开发计划于 11 月全面发布。
张善友
2025/02/04
1210
.NET 9 预览版6发布
.NET Core 3.0-preview3 发布
.NET Core 3.0 Preview 3已经发布,框架和ASP.NET Core有许多有趣的更新。这是最重要的更新列表。 下载地址 :https://aka.ms/netcore3download 。
张善友
2019/07/02
1.9K0
ASP.NET Core 2.2: SignalR的Java客户端
在 ASP.NET Core 2.2中,我们将为 SignalR 新增一个 Java 客户端。此新客户端现在可用。此客户端支持从 Java 代码 (包括 Android 应用程序) 连接到 ASP.NET Core 的SignalR 服务端。
Edi Wang
2019/07/08
1.8K0
【ASP.NET Core 基础知识】--项目结构
ASP.NET Core项目的基本结构通常遵循一种标准的组织方式,这有助于提高项目的可维护性和可扩展性。以下是一个典型的ASP.NET Core项目的基本结构:
喵叔
2024/01/10
5540
【ASP.NET Core 基础知识】--项目结构
推荐阅读
相关推荐
【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档