asp.net 核心 3.1 SignalR:将复杂对象从 javascript 客户端传递到集线器
asp.net core 3.1 SignalR: pass complex object from javascript client to Hub
我正在尝试将一个对象从客户端传递到集线器:
在客户端:
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 中,模型不为空,但值始终为 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。
我正在尝试将一个对象从客户端传递到集线器: 在客户端:
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 中,模型不为空,但值始终为 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。