protected override async Task OnInitializedAsync() { try { string baseUrl = NavigationManager.BaseUri; _hubUrl = baseUrl.TrimEnd('/') + "/chatHub"; hubConnection = new HubConnectionBuilder() .WithUrl(_hubUrl, options => { options.AccessTokenProvider = async() => { var accessTokenResult = await AccessTokenProvider.GetAuthenticationStateAsync(); return(await storage.GetTokenAsync()); }; }) .Build(); hubConnection.On <MessageViewModel>("newMessage", async(message) => { messages.Insert(0, message); StateHasChanged(); }); hubConnection.On <string>("onError", async(message) => { MessageViewModel msg = new MessageViewModel(); msg.Content = message; messages.Insert(0, msg); StateHasChanged(); }); hubConnection.On <UserViewModel>("joinedRoom", async(message) => { inputModel.CurrentRoom = message.CurrentRoom; messages.Clear(); IList <MessageViewModel> mess = await hubConnection.InvokeAsync <IList <MessageViewModel> >("GetMessageHistory", inputModel.Room); foreach (var m in mess) { messages.Insert(0, m); } StateHasChanged(); }); hubConnection.On <UserViewModel>("removeUser", async(message) => { users = await hubConnection.InvokeAsync <IList <UserViewModel> >("GetUsers", message.CurrentRoom); StateHasChanged(); }); hubConnection.On <UserViewModel>("addUser", async(message) => { users = await hubConnection.InvokeAsync <IList <UserViewModel> >("GetUsers", message.CurrentRoom); StateHasChanged(); }); hubConnection.On <RoomViewModel>("removeChatRoom", async(message) => { rooms = await hubConnection.InvokeAsync <IList <RoomViewModel> >("GetRooms"); StateHasChanged(); }); hubConnection.On <RoomViewModel>("addChatRoom", async(message) => { rooms = await hubConnection.InvokeAsync <IList <RoomViewModel> >("GetRooms"); StateHasChanged(); }); hubConnection.On <string>("onRoomDeleted", async(message) => { inputModel.Room = "Lobby"; MessageViewModel msg = new MessageViewModel(); msg.Content = $"Room was deleted, you are now moved back to {inputModel.Room}"; messages.Insert(0, msg); await JoinRoom(); StateHasChanged(); }); await hubConnection.StartAsync(); username = await hubConnection.InvokeAsync <string>("WhoAmI"); inputModel.Room = "Lobby"; inputModel.Recipent = "Room"; rooms = await hubConnection.InvokeAsync <IList <RoomViewModel> >("GetRooms"); await JoinRoom(); } catch (Exception ex) { MessageViewModel msg = new MessageViewModel(); msg.Content = ex.Message; messages.Insert(0, msg); } finally { // this.StateHasChanged(); } }