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

ASP.NET Core SignalR MessagePack 中心协议选项类型已从 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);
    });

更改原因

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

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

受影响的 API

Microsoft.AspNetCore.SignalR.MessagePackHubProtocolOptions