DEV Community

Dominic Pascasio
Dominic Pascasio

Posted on • Edited on

ASP.NET Core - Tiny Chat App using SignalR

Warning! This code is for demonstration purposes only.

  1. Create an empty ASP.NET web app:

    dotnet new web -o TinyChat 
  2. In your Program.cs, add SignalR service, set to serve static files and map the SignalR hub.

    var builder = WebApplication.CreateBuilder(args); builder.Services.AddSignalR(); var app = builder.Build(); app.UseStaticFiles(); app.MapHub<ChatHub>("/ChatHub"); app.Run(); 
  3. In your project directory, add ChatHub.cs that contains:

    using Microsoft.AspNetCore.SignalR; public class ChatHub : Hub { // this can be invoked from the client -- web browser in our example public async Task SendMessage(string username, string message) { // invoke ReceiveMessage on all clients connected await Clients.All.SendAsync("ReceiveMessage", username, message); } } 
  4. Add folder wwwroot in the project directory. Then add chat.html which contains:

    <!DOCTYPE html> <html> <head></head> <body> <input id='usernameInput' placeholder='username' /> <input id='messageInput' placeholder='message' /> <button id='sendButton'>Send</button> <ul id='conversationList'></ul> <script src='https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/6.0.8/signalr.min.js'></script> <script src='/chat.js'></script> </body> </html> 
  5. In wwwroot, add chat.js which contains:

    "use strict"; document.addEventListener('DOMContentLoaded', function() { var connection = new signalR.HubConnectionBuilder().withUrl("/ChatHub").build(); // Handler for receiving a message. This will be invoked by the server. connection.on("ReceiveMessage", function (username, message) { var messageItem = document.createElement("li"); messageItem.textContent = `${username}: ${message}`; var conversationList = document.querySelector("#conversationList"); conversationList.prepend(messageItem); }); // Initiate connection and set callback for error. connection.start().then(function () { }).catch(function (err) { return console.error(err.toString()); }); // Handler for sending message to the server. document.querySelector("#sendButton").addEventListener("click", function (event) { var username = document.querySelector("#usernameInput").value; var message = document.querySelector("#messageInput").value; connection.invoke("SendMessage", username, message) .catch(function (err) { return console.error(err.toString()); }); event.preventDefault(); }); }); 
  6. Run the app using dotnet run and go to https://localhost:<port>/chat.html.

Resource
Microsoft Docs

Top comments (0)