【问题标题】:How Can I send Clients value in ASP.NET Controller?如何在 ASP.NET 控制器中发送客户端值?
【发布时间】:2021-08-06 16:33:23
【问题描述】:

我用 c#、javascript 编写了一个代码,使用客户端库 SignalR 在数据库值更改中刷新页面。我的代码是

<form asp-action="Start" method="post" class="form-stacked">
    <button type="submit" id="startPractice" class="button-primary">Start Practice</button>
</form>

<script src="~/js/ignalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>

我的API方法是点击开始练习时调用的

public async Task<IActionResult> Index(long sessionId)
{
     // Database change logic

     SignalRClientHub sr = new SignalRClientHub();
     await sr.SendMessage();

     // Rest of the logic

     return this.View();
}

 public class SignalRClientHub : Hub
    {
        public async Task SendMessage(string user = null, string message = null)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }

chat.js 代码

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/SignalRClient").build();

connection.on("ReceiveMessage", function (user, message) {
    location.reload();
});

当我单击按钮开始练习时,它会点击 SendMessage 方法,但我收到错误

object reference not set to an instance

因为 Client 的值为 null。我该如何解决这个问题?

【问题讨论】:

  • 您的客户可能为空:await Clients.All.SendAsync("ReceiveMessage", user, message);
  • 哪一行导致空引用错误?
  • @Devilscomrade at await Clients.All.SendAsync("ReceiveMessage", user, message);这一行我得到一个错误

标签: javascript c# jquery signalr


【解决方案1】:

不能手动新建集线器。为了从集线器外部发送给客户,您需要使用IHubContext&lt;THub&gt;。有关详细信息,请参阅文档https://docs.microsoft.com/aspnet/core/signalr/hubcontext?view=aspnetcore-5.0

【讨论】:

  • Clients 值现在不为空了,谢谢。现在在 SignalRClientHub 类中,我编写了一个代码,以便它调用 ``` connection.on("ReceiveMessage", function (user, message) { location.reload(); }); ```上面chat.js的方法,我想重新加载位置,但是我不能去chat.js的那个方法,我尝试了console.log而不是location.reload,但是那个方法没有被调用集线器。你能帮忙了解一下chat.js的那个方法吗?
  • 你启动客户端了吗?在您粘贴的代码中,您尚未启动客户端。
  • 如何启动客户端?
  • 非常感谢我没有错过连接开始它的工作。如果您能提供帮助,我还有另一个问题,那就太好了。每个页面都重新加载正常,但我不想重新加载调用 API 的选项卡,我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2017-12-23
  • 2016-03-27
  • 2012-05-20
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
相关资源
最近更新 更多