控制器
public class MyController : Controller
{
private readonly IHubContext<MyHub> myHub;
public MyController (IHubContext<MyHub> myHub)
{
this.myHub = myHub;
}
[HttpPost]
public async Task<IActionResult> SomeAction()
{
await myHub.Clients.All.SendAsync("MethodToInvokeJS", "data");
return this.RedirectToAction("View");
}
}
注册SignalR
public void Configure(IApplicationBuilder app)
{
app.UseSignalR(routes =>
{
routes.MapHub<MyHub>("/myHub");
});
}
在单独的视图上运行的JS代码
var connection = new signalR.HubConnectionBuilder().withUrl("/myHub").build();
connection.on("MethodToInvokeJS", function (data) {
// do something with data
});
我要做什么
我在不同的控制器上有2个单独的视图,我想处理来自 MyController 的发布操作,并将其重定向到“视图”,同时让我知道另一个控制器上的其他页面,我通过该页面进行了一些更改JS。
我发现的结果
MyController 处理请求,并在第二页上以正确的连接数量调用正确初始化的Hub。 “ SendAsync”集线器方法在调试模式下结束,但是在第二页上,我收到“信息:连接已断开”。一旦它在浏览器控制台中移至第二页打开。它甚至都没有达到“ //对数据进行处理”上的断点。
PS
仅在javascript中从同一页面调用这些集线器方法即可,并且不涉及控制器。