SignalR:MessagePack 中心协议选项类型已更改

ASP.NET Core SignalR 的 MessagePack Hub 协议选项类型已经从 IList<MessagePack.IFormatterResolver> 类型更改为 MessagePack 库的 MessagePackSerializerOptions 类型。

有关此更改的讨论,请参阅 dotnet/aspnetcore#20506

已引入的版本

5.0 预览版 4

旧行为

您可以按照下面的示例将内容添加到选项中。

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.FormatterResolvers.Add(MessagePack.Resolvers.StandardResolver.Instance);
    });

并且将选项按如下所示替换:

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.FormatterResolvers = new List<MessagePack.IFormatterResolver>()
        {
            MessagePack.Resolvers.StandardResolver.Instance
        };
    });

新行为

您可以按照下面的示例将内容添加到选项中。

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.SerializerOptions =
            options.SerializeOptions.WithResolver(MessagePack.Resolvers.StandardResolver.Instance);
    });

并且将选项按如下所示替换:

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.SerializerOptions = MessagePackSerializerOptions
                .Standard
                .WithResolver(MessagePack.Resolvers.StandardResolver.Instance)
                .WithSecurity(MessagePackSecurity.UntrustedData);
    });

更改原因

此更改是迁移到在 aspnet/Announcements#404 中宣布的 MessagePack v2.x 的一部分。 v2.x 库添加了一个选项 API,该 API 更易于使用,并提供的功能比之前公开的功能列表 MessagePack.IFormatterResolver 更多。

此重大更改将影响在 MessagePackHubProtocolOptions 上配置值的用户。 如果使用 ASP.NET Core SignalR MessagePack 中心协议并修改这些选项,请更新用法以使用新的选项 API,如上所示。

受影响的 API

Microsoft.AspNetCore.SignalR.MessagePackHubProtocolOptions