关于c#:Blazor-使用SignalR发送消息问题

Blazor - Send Message problem using SignalR

我创建了相当复杂的Blazor应用程序,调用了Web API,注入了服务并使用了第三方库。但是我有史以来第一次使用SignalR。我的设置是:

  • ASP.NET Core Web API(繁重的工作)
  • 前端-Blazor App(服务器端-通过在blazor项目中创建的Services类调用Web API)

一切正常。我在api中创建了一个集线器并公开了端点。通过开拓者客户端,我可以建立连接,并通过集线器将连接额外的客户端通知所有客户端。

enter

enter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
@page"/index"
@using Microsoft.AspNetCore.SignalR.Client


    <input type="text" id="message" class="form-control" bind="@Message" />
    <input type="button" id="sendMessage" value="Send" class="btn btn-primary" onclick="@SendMessage()" />
    <ul id="discussion">
        @foreach (var message in messages)
        {
           
<li>
@message
</li>

        }
   
</ul>



@code{
        HubConnection connection;
        string Message ="";
        IList<string> messages = new List<string>();

    protected override async Task OnInitializedAsync()
    {
        connection = new HubConnectionBuilder().WithUrl("http://localhost:63572/livedata").Build();
        connection.On<string, string>("broadcastMessage", this.OnBroadcastMessage);
        await connection.StartAsync();
    }

    Task OnBroadcastMessage(string name, string message)
    {
        if (!string.IsNullOrEmpty(message))
        {
            messages.Add(name +" :" + message);
            StateHasChanged();
        }
        return Task.CompletedTask;
    }

    async Task SendMessage()
    {
        await connection.InvokeAsync("Send","Blazor Client", Message);
        Message ="";
    }
}

我的中心类也很简单;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

namespace SignalRTest
{
    public class LiveData : Hub
    {
        public override Task OnConnectedAsync()
        {
            Clients.All.SendAsync("broadcastMessage","system", $"{Context.ConnectionId} joined the conversation");
            return base.OnConnectedAsync();
        }
        public void Send(string name, string message)
        {
            Clients.All.SendAsync("broadcastMessage", name, message);
        }

        public override Task OnDisconnectedAsync(System.Exception exception)
        {
            Clients.All.SendAsync("broadcastMessage","system", $"{Context.ConnectionId} left the conversation");
            return base.OnDisconnectedAsync(exception);
        }
    }
}

请问有人可以建议如何解决该问题,这样我就可以开始在Blazor中使用SignalR。

非常感谢


对不起,我不好!

非常愚蠢(语法)问题。通常,我使用3rd blazor库(如Radzen,DevExpress等)来生成UI。对于这个出色的signalR客户端应用程序,我使用纯html标签。问题出在"绑定"