如何在 ASP.NET MVC 中将参数和数据从控制器发送到 SignalR hub?

问题描述 投票:0回答:1

我使用 ASP.NET MVC。我想将数据从控制器发送到集线器以发送给客户端。我在控制器中编写了这段代码:

public class SampleController : Controller
{
    private readonly IHubContext<silgramHubs> _hubContext;

    public SampleController(IHubContext<silgramHubs> hubContext)
    {
        _hubContext = hubContext;
    }

    public SampleController()
    {
    }

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Save(long id = 0, string note = "")
    {
        NumberViewModel ml = new NumberViewModel { Iid = id, INote = note };
        return RedirectToAction("OneMessage", ml);
    }

    public ActionResult OneMessage(NumberViewModel ml)
    {
        var Iid = (int)ml.Iid;
        var Note = ml.INote;

        _hubContext.Clients.All.sendPartialViewHtmlToClients(Iid, Note);

        return PartialView(ml);
    }
}

这是与我的中心相关的代码:

using System.Web.Mvc;
using System.Text;
using System.IO;
using testproject.Controllers;

namespace testproject.Hubs
{
    public class SilgramHubs : Hub
    {
        public void sendPartialViewHtmlToClients(int id, string note)
        {
            Clients.All.addNewMessage(id, note);
        }
    }
}

StartUp.cs

using System;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;
using Microsoft.AspNet.SignalR.SqlServer;
using Microsoft.Owin.Cors;

[assembly: OwinStartup(typeof(SadeMvc.Startup))]

namespace SadeMvc
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR("/signalr", new HubConfiguration
            {
                EnableJSONP = true, // if needed
                EnableDetailedErrors = true // if needed
            });

            app.UseCors(CorsOptions.AllowAll);

            app.MapSignalR();

        }
    }
}

这是我的客户端脚本,用于连接到集线器并接收消息:

$(function () {
    var chat = $.connection.chatHubs;

    chat.client.addNewMessage = function (id, note) {
        console.log("Received message:", id, note);
    };

    $.connection.hub.start().done(function () {
        console.log("SignalR hub connected");
    });
});

不幸的是,下面一行中的操作符退出时没有任何错误。

_hubContext.Clients.All.sendPartialViewHtmlToClients( Iid, Note);

我想将参数从控制器发送到 ASP.NET MVC 中的集线器。请指导我如何做到这一点。

c# asp.net-mvc signalr signalr-hub
1个回答
0
投票

我有一个获取 hubContext 的替代建议。您可以按如下方式创建 hubcontext:

var hubcontext = GlobalHost.ConnectionManager.GetHubContext<SilgramHubs>(); 
hubcontext.Client.All.sendPartialViewHtmlToClients(Iid, Note); 

我认为这有效。

© www.soinside.com 2019 - 2024. All rights reserved.