【发布时间】:2021-01-23 23:32:38
【问题描述】:
我有一个类,我正试图从带有 signalR 的 WebAPI 服务器发送到 Blazor WASM。我使用了新的 Blazor 模板,并选中了 .net 核心托管选项。将字符串或整数发送到 NewUser 方法可以正常工作,但是当使用如下所示的自定义对象时,我什么也得不到。我认为序列化/反序列化存在问题,但我找不到任何选项。我在配置中遗漏了什么吗?
public class User
{
public string Id { get; set; }
[Required(ErrorMessage ="You must specify a username")]
[StringLength(20,MinimumLength=1,ErrorMessage="Please enter a username no longer than 20 characters")]
public string Username { get; set; }
public string ConnectionId { get; set; }
}
集线器
public async Task Register(AppState state)
{
await _roomRepository.RegisterUser(state);
await Groups.AddToGroupAsync(state.user.ConnectionId,state.matchroom.Id);
await Clients.Group(state.matchroom.Id).SendAsync("NewUser", $"{state.user}");
}
Startup.cs (WebAPI Server) 大量省略
services.AddSignalR();
services.AddResponseCompression(opts =>
{
opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/octet-stream" });
});
Blazor 页面
protected override async Task OnInitializedAsync()
{
hubConnection = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("/matchhub"))
.Build();
hubConnection.On<User>("NewUser", (user) =>
{
AppState.matchroom.Users.Add(user);
StateHasChanged();
});
await hubConnection.StartAsync();
AppState.user.ConnectionId = hubConnection.ConnectionId;
await hubConnection.SendAsync("register", AppState)
}
【问题讨论】:
-
开启服务器端和客户端的日志记录。如果序列化/反序列化出现错误,它应该显示在日志中。
-
实际上,在第二次读取时,您似乎将
state.user作为字符串写入并发送,因此客户端无法将User类型与string类型匹配它接收。 -
@Brennan 就是这样!发布,以便我标记答案!