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

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

var builder = WebApplication.CreateBuilder(args); builder.Services.ConfigureRouteHandlerJsonOptions(options => { //Ignore Cycles options.SerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; }); SignalR 客户端源生成器

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

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

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

添加对 Microsoft.AspNetCore.SignalR.Client.SourceGenerator 包的引用。

将 HubServerProxyAttribute 和 HubClientProxyAttribute 类添加到您的项目中(这部分设计可能会在未来的预览版中更改):

[AttributeUsage(AttributeTargets.Method)] internal class HubServerProxyAttribute : Attribute { } [AttributeUsage(AttributeTargets.Method)] internal class HubClientProxyAttribute : Attribute { }

为您的项目添加一个静态分部类,并使用 [HubClientProxy] 和 [HubServerProxy] 属性编写静态分部方法

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); }

使用代码中的部分方法!

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 应用中使用空状态检查时的体验:

@model Product? 在验证错误中使用 JSON 属性名称

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

services.AddControllers(options => { options.ModelMetadataDetailsProviders.Add(new SystemTextJsonValidationMetadataProvider()) }); 改进了 dotnet watch 的控制台输出

我们清理了 dotnet watch 的控制台输出,以更好地与 ASP.NET Core 的注销保持一致,并在

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

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