public async Task SendMessage(JsonMessage message) { var sender = await _userManager.GetUserAsync(Context.User); if (message.Sender.UserName != sender.UserName) { throw new AuthenticationException(); } var receiver = await _userManager.FindByNameAsync(message.Receiver.UserName) ?? throw new ArgumentException($"User with user name {message.Receiver.UserName} doesn't exist"); message.Text = new Regex(@" ?").Replace(message.Text, " "); message.Text = HttpUtility.HtmlDecode(message.Text); if (string.IsNullOrWhiteSpace(message.Text)) { throw new ArgumentNullException(nameof(message.Text)); } if (message.Text.Length > 4096) { throw new ArgumentException("Message text length must be less then 4096"); } await _messageManager.AddAsync(new Message { Receiver = receiver, Sender = sender, SendDate = DateTime.UtcNow, Text = message.Text }); var pathToProfilePhotos = Path.Combine(_environment.ContentRootPath, _photoOptions.Value.UsersPhotosPath); message.Sender.PhotoUrl = Path.Combine(pathToProfilePhotos, sender.ProfilePhotoName); message.Receiver.PhotoUrl = Path.Combine(pathToProfilePhotos, receiver.ProfilePhotoName); var receiverId = Connections.GetValueOrDefault(message.Receiver.UserName); if (!(receiverId is null)) { await Clients.Client(receiverId).SendAsync("receiveMessage", message); }