>我使用nuget获取我的MVC4项目的SignalR.
>在我的控制器中创建一个MyHub类(SignalRTestController.cs)
>在“索引操作”中,尝试从集线器外部广播消息并返回视图.
>在视图中,引用了所有脚本和/ signalr / hubs.
问题是/ signalr / hubs没有找到(throws 404).
我的项目有区域,结构如图所示:
> MVCProject
>区域
> SubFolder
>控制器
> SignalRTestController.cs
>模型
>查看
> Index.cshtml
>控制器
>模型
>查看
>脚本
signalR的所有脚本都在Scripts文件夹中,我的SignalRTestController.cs如下所示:
namespace SignalRTest.Controllers { public class SignalRTestController : Controller { public ActionResult Index() { // Do some work here // Broadcasting over a Hub from outside of a Hub var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); context.Clients.say("Hello SignalR!"); return View(); } } [HubName("MyHub")] public class MyHub : Hub { public void Say(string message) { Clients.sendMessage(message); } } }
任何我的Index.cshtml都引用了所有的javascript和/ signalr / hubs,如下所示:
//其他Javascripts
script type =“text / javascript”src =“/ signalr / hubs”/>
我认为控制器是好的,但我没有得到/ signalr / hubs.正在投掷404,Chrome控制台中的消息是这样的:
资源解释为脚本,但是使用MIME类型text / html:“http://www.myproject.com/signalr/hubs”进行传输.
未知的语法错误:意外的令牌<集线器:2
未捕获SignalR:加载集线器时出错.确保您的枢纽参考是正确的,例如
脚本src =’/ signalr / hubs’> ;.
脚本作为html返回的原因是服务器返回404未找到.
我不知道有什么问题.我认为这可能是路由问题.我不知道,如果我们需要在/ signalr / hubs的项目中添加任何路由信息,或者我在这里缺少一些东西.
解决方法
我一直在玩它.看来,在当前版本(我得到最新的源,因为我需要一个签名的程序集),你必须调用RouteTable.Routes.MapHubs().但是为了工作,它必须先被调用(或至少在RouteConfig.RegisterRoutes()调用之前).如果之后被调用,MVC会为此控制器寻找并且不起作用.在我通过nuGet使用的早期版本中,删除RouteTable.Routes.MapHubs()来解决问题,但现在似乎是必需的.希望有帮助 – 皮特11月27日20时53分
显然你通过将RouteTable.Routes.MapHubs()更改为:RouteTable.Routes.MapHubs( “〜/ signalr”).