如何在 ASP.NET 控制器中发送客户端值?
Posted
技术标签:
【中文标题】如何在 ASP.NET 控制器中发送客户端值?【英文标题】:How Can I send Clients value in ASP.NET Controller? 【发布时间】: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);这一行我得到一个错误 【参考方案1】:您不能手动新建集线器。为了从集线器外部发送给客户,您需要使用IHubContext<THub>
。有关详细信息,请参阅文档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的那个方法吗? 你启动客户端了吗?在您粘贴的代码中,您尚未启动客户端。 如何启动客户端? 你真的应该阅读文档docs.microsoft.com/aspnet/core/tutorials/… 非常感谢我没有错过连接开始它的工作。如果您能提供帮助,我还有另一个问题,那就太好了。每个页面都重新加载正常,但我不想重新加载调用 API 的选项卡,我该怎么做?以上是关于如何在 ASP.NET 控制器中发送客户端值?的主要内容,如果未能解决你的问题,请参考以下文章