结合使用 ASP.NET Core SignalR 和 Blazor WebAssembly
作者:Daniel Roth 和 Luke Latham
重要
Blazor WebAssembly 为预览版状态
ASP.NET Core 3.0 支持 Blazor Server 。 Blazor WebAssembly 在 ASP.NET Core 3.1 中为预览版。
本教程介绍使用 SignalR 和 Blazor WebAssembly 生成实时应用的基础知识。 您将学习如何:
- 创建 Blazor WebAssembly 托管应用项目
- 添加 SignalR 客户端库
- 添加 SignalR 集线器
- 添加 SignalR 服务和 SignalR 集线器的终结点
- 添加用于聊天的 Razor 组件代码
在本教程结束时,你将拥有一个正常运行的聊天应用。
先决条件
-
Visual Studio
- 具有ASP.NET 和 web 开发工作负荷的Visual Studio 2019 16.4 或更高版本
-
Visual Studio Code
Visual Studio Code 说明使用用于 ASP.NET Core 的 .NET Core CLI 开发功能,如项目创建。 可在任何平台(macOS、Linux 或 Windows)上或在任何代码编辑器中遵循这些说明。 如果使用 Visual Studio Code 以外的其他内容,则可能需要进行少量更改。
- Visual Studio for Mac
- .NET Core CLI
创建托管 Blazor WebAssembly 应用项目
安装 Blazor WebAssembly 模板。 当 Blazor WebAssembly 处于预览状态时, Microsoft.AspNetCore.Blazor.Templates 包具有预览版本。 在命令行界面中执行以下命令:
dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.2.0-preview1.20073.1
按照所选工具的指南进行操作:
-
Visual Studio
创建新项目。
选择“Blazor 应用”,然后选择“下一步”。
在“项目名称”字段中键入“BlazorSignalRApp”。 确认“位置”条目正确无误或为项目提供位置。 选择“创建”。
选择“Blazor WebAssembly 应用”模板。
在“高级”下选中“托管的 ASP.NET Core”复选框。
选择“创建”。
备注
如果升级或安装了新版 Visual Studio,并且 Blazor WebAssembly 模板没有出现在 VS UI 中,请使用前面显示的
dotnet new
命令重新安装该模板。 -
Visual Studio Code
在命令行界面中执行以下命令:
dotnet new blazorwasm --hosted --output BlazorSignalRApp
在 Visual Studio Code 中打开应用的项目文件夹。
当显示添加资产以生成和调试应用的对话框时,选择“是”。 Visual Studio Code 会自动添加“.vscode”文件夹以及生成的“launch.json”和“tasks.json”文件。
-
Visual Studio for Mac
在命令行界面中执行以下命令:
dotnet new blazorwasm --hosted --output BlazorSignalRApp
在 Visual Studio for Mac 中,通过导航到项目文件夹并打开项目的解决方案文件 (.sln) 打开项目。
-
.NET Core CLI
在命令行界面中执行以下命令:
dotnet new blazorwasm --hosted --output BlazorSignalRApp
添加 SignalR 客户端库
-
Visual Studio
在“解决方案资源管理器”中,右键单击“BlazorSignalRApp.Client”项目,然后选择“管理 NuGet 包”。
在“管理 NuGet 包”对话框中,确认“包源”设置为“nuget.org”。
选择“浏览”后,在搜索框中键入“Microsoft.AspNetCore.SignalR.Client”。
在搜索结果中,选中
Microsoft.AspNetCore.SignalR.Client
包,然后选择“安装”。如果出现“预览更改”对话框,则选择“确定”。
如果出现“许可证接受”对话框,如果你同意许可条款,请选择“我接受”。
-
Visual Studio Code
在“集成终端”(工具栏上的“视图” > “终端”)中,执行以下命令:
dotnet add Client package Microsoft.AspNetCore.SignalR.Client
-
Visual Studio for Mac
在“解决方案”边栏中,右键单击“BlazorSignalRApp.Client”项目,然后选择“管理 NuGet 包”。
在“管理 NuGet 包”对话框中,确认源下拉列表设置为“nuget.org”。
选择“浏览”后,在搜索框中键入“Microsoft.AspNetCore.SignalR.Client”。
在搜索结果中,选中
Microsoft.AspNetCore.SignalR.Client
包旁边的复选框,然后选择“添加包”。出现“许可证接受”对话框时,如果你同意许可条款,请选择“接受”。
-
.NET Core CLI
在命令行界面中执行以下命令:
cd BlazorSignalRApp dotnet add Client package Microsoft.AspNetCore.SignalR.Client
添加 SignalR 集线器
在“BlazorSignalRApp.Server”项目中,创建一个“Hubs”(复数)文件夹,并添加以下 ChatHub
类 (Hubs/ChatHub.cs):
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; namespace BlazorSignalRApp.Server.Hubs { public class ChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } } }
添加 SignalR 服务和 SignalR 集线器的终结点
在“BlazorSignalRApp.Server”项目中,打开“Startup.cs”文件。
将
ChatHub
类的命名空间添加到文件顶部:using BlazorSignalRApp.Server.Hubs;
将 SignalR 服务添加到
Startup.ConfigureServices
:services.AddSignalR();
在默认控制器路由的终结点与客户端回退的终结点之间的
Startup.Configure
中,为集线器添加终结点:app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); endpoints.MapHub<ChatHub>("/chatHub"); endpoints.MapFallbackToClientSideBlazor<Client.Program>("index.html"); });
添加用于聊天的 Razor 组件代码
在“BlazorSignalRApp.Client”项目中,打开“Pages/Index.razor”文件。
将标记替换为以下代码:
@page "/" @using Microsoft.AspNetCore.SignalR.Client @inject NavigationManager NavigationManager <div class="form-group"> <label> User: <input @bind="_userInput" /> </label> </div> <div class="form-group"> <label> Message: <input @bind="_messageInput" size="50" /> </label> </div> <button @onclick="Send" disabled="@(!IsConnected)">Send</button> <hr> <ul id="messagesList"> @foreach (var message in _messages) { <li>@message</li> } </ul> @code { private HubConnection _hubConnection; private List<string> _messages = new List<string>(); private string _userInput; private string _messageInput; protected override async Task OnInitializedAsync() { _hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/chatHub")) .Build(); _hubConnection.On<string, string>("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; _messages.Add(encodedMsg); StateHasChanged(); }); await _hubConnection.StartAsync(); } Task Send() => _hubConnection.SendAsync("SendMessage", _userInput, _messageInput); public bool IsConnected => _hubConnection.State == HubConnectionState.Connected; }
运行应用
- 按照工具的指南进行操作:
-
Visual Studio
在“解决方案资源管理器”中,选择“BlazorSignalRApp.Server”项目。 按 Ctrl+F5 可运行应用而不进行调试。
从地址栏复制 URL,打开另一个浏览器实例或选项卡,并在地址栏中粘贴该 URL。
选择任一浏览器,输入名称和消息,然后选择“发送”按钮。 两个页面上立即显示名称和消息:
Quotes:Star Trek VI:The Undiscovered Country ©1991 Paramount
-
Visual Studio Code
从工具栏选择“调试” > “运行(不调试)”。
从地址栏复制 URL,打开另一个浏览器实例或选项卡,并在地址栏中粘贴该 URL。
选择任一浏览器,输入名称和消息,然后选择“发送”按钮。 两个页面上立即显示名称和消息:
Quotes:Star Trek VI:The Undiscovered Country ©1991 Paramount
-
Visual Studio for Mac
在“解决方案”边栏中,选择“BlazorSignalRApp.Server”项目。 从菜单中选择“运行” > “开始执行(不调试)”。
从地址栏复制 URL,打开另一个浏览器实例或选项卡,并在地址栏中粘贴该 URL。
选择任一浏览器,输入名称和消息,然后选择“发送”按钮。 两个页面上立即显示名称和消息:
Quotes:Star Trek VI:The Undiscovered Country ©1991 Paramount
-
.NET Core CLI
在命令行界面中执行以下命令:
cd Server dotnet run
从地址栏复制 URL,打开另一个浏览器实例或选项卡,并在地址栏中粘贴该 URL。
选择任一浏览器,输入名称和消息,然后选择“发送”按钮。 两个页面上立即显示名称和消息:
Quotes:Star Trek VI:The Undiscovered Country ©1991 Paramount
后续步骤
在本教程中,你将了解:
- 创建 Blazor WebAssembly 托管应用项目
- 添加 SignalR 客户端库
- 添加 SignalR 集线器
- 添加 SignalR 服务和 SignalR 中心的终结点
- 添加用于聊天的 Razor 组件代码
若要了解有关生成 Blazor 应用的详细信息,请参阅 Blazor 文档:
其他资源
上一篇:没有了