0
votes

I have a class I am trying to send from WebAPI server w/ signalR to Blazor WASM. I used the new Blazor template with the .net core hosted option checked. It works fine sending a string or integer to the NewUser method, but when using a custom object like User seen below, I get nothing. I think there is a problem serializing/deserializing but I can't find any options. Am I missing something in the configuration?

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; }
}

Hub

    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) lots omitted

services.AddSignalR();
services.AddResponseCompression(opts =>
      {
            opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "application/octet-stream" });
        });

Blazor Page

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)
    }
1
Turn on logging for server and client side. If there is an error serializing/deserializing it should show up in the logs. - Brennan
Actually, on second read, it looks like you're writing state.user as a string and sending that, so the client side can't match the User type to the string type it receives. - Brennan
@Brennan that was it! Post so I can mark answer! - Parakoopa

1 Answers

1
votes

It looks like you're writing state.user as a string and sending that, so the client side can't match the User type to the string type it receives.