SignalR-从控制器调用集线器SendAsync

时间:2019-03-16 18:20:04

标签: model-view-controller .net-core controller signalr

控制器

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中从同一页面调用这些集线器方法即可,并且不涉及控制器。

0 个答案:

没有答案