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

Nik*_*rov 1 javascript c# signalr asp.net-core asp.net-core-signalr

我试图将一个对象从客户端传递到集线器:在客户端上:

connection.invoke('MyMethod', {
                i: 1,
                a: 25
            });
Run Code Online (Sandbox Code Playgroud)

在集线器上:

        public async Task MyMethod(TestModel model)
        {
            // logic
        }
Run Code Online (Sandbox Code Playgroud)

模型:

public class TestModel
{
    [JsonProperty("i")]
    public double Min {get;set;}
    [JsonProperty("a")]
    public double Max {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

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

我做错了什么?

Bra*_*ang 7

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

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

services.AddSignalR()
    .AddNewtonsoftJsonProtocol();
Run Code Online (Sandbox Code Playgroud)

更多详细信息,您可以参考这篇文章