asp.net core 3.1 SignalR:将复杂对象从javascript客户端传递到集线器

问题描述

我正在尝试将对象从客户端传递到集线器: 在客户端上:

connection.invoke('MyMethod',{
                i: 1,a: 25
            });

在中心:

        public async Task MyMethod(TestModel model)
        {
            // logic
        }

型号:

public class TestModel
{
    [JsonProperty("i")]
    public double Min {get;set;}
    [JsonProperty("a")]
    public double Max {get;set;}
}

在MyMethod中,模型不为null,但值始终为0。

我做错了什么?

解决方法

根据您的描述,您应该在ASP.NET Core 3.0 SignalR项目中使用Newtonsoft.Json,因为asp.net核心默认情况下不使用Newtonsoft.Json。

您应该安装Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson NuGet软件包,然后如下所示修改startp.cs ConfigureServices方法:

services.AddSignalR()
    .AddNewtonsoftJsonProtocol();

更多详细信息,您可以参考此article