【发布时间】:2017-02-03 02:57:33
【问题描述】:
这就是我所做的。
- 我使用 nuget 为我的 MVC4 项目获取 SignalR。
- 在我的控制器中创建了一个 MyHub 类 (SignalRTestController.cs)
- 在索引操作中,尝试从集线器外部广播消息并返回视图。
- 在视图中,引用了所有脚本和 /signalr/hubs。
问题是找不到 /signalr/hubs(抛出 404)。
我的项目有区域,结构如图所示:
- MVC项目
- 区域
- 子文件夹
- 控制器
- 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 都引用了所有 javascripts 和 /signalr/hubs,如下所示: // 其他 Javascripts
script type="text/javascript" src="/signalr/hubs" />
我认为控制器没问题,但我没有收到 /signalr/hubs。它正在抛出 404,Chrome 控制台中的消息是这样的:
资源解释为脚本,但使用 MIME 类型 text/html 传输:“http://www.myproject.com/signalr/hubs”。 Uncaught SyntaxError: Unexpected token .
脚本返回为 html 的原因是服务器返回 404 not found。
我不确定出了什么问题。我认为这可能是一个路由问题。我不确定,如果我们需要在项目中为 /signalr/hubs 添加任何路由信息,或者我在这里遗漏了什么。
仅供参考:当我创建一个新的空 MVC 项目并添加 signalR 并开始处理它时,它工作得非常好。无需添加路由。
另外,我在某些地方同时使用默认路由和属性路由。但是控制器 SignalRTestController 不使用属性路由。
【问题讨论】:
-
你解决过这个问题吗?
-
目前还没有。我们已经从这个 sprint 中删除了这个任务。我能够在测试项目中使用 signalR,但不能在实际项目中使用。必须再次经历这个并做一个详细的研究。对不起:(
-
你有调用 RouteTable.Routes.MapHubs()(可能在 Global.asax 中)吗?如果是这样,请尝试摆脱它,看看它是否能解决您的问题。
-
我一直在玩它。看来在当前版本中(我得到了最新的源代码,因为我需要一个签名的程序集),你必须调用 RouteTable.Routes.MapHubs()。但要使其工作,必须首先调用它(或至少在 RouteConfig.RegisterRoutes() 调用之前)。如果在此之后调用它,MVC 会为其寻找控制器,但这是行不通的。在我使用的通过 nuGet 获得的早期版本中,删除 RouteTable.Routes.MapHubs() 可以解决问题,但现在似乎是必需的。希望对您有所帮助。
-
我一指定 RouteTable.Routes.MapHubs("~/signalr"),它就开始工作了。我认为这是一个问题。 @Pete您能否将您的评论添加为aswer,以便我将其标记为正确并关闭它。这是我所做的,我使用 Install-Package Microsoft.AspNet.SignalR -pre 安装了最新的信号器,并将 RouteTable.Routes.MapHubs("~/signalr") 添加到 Global.aspx 中的 Application_Start。
标签: asp.net-mvc-4 http-status-code-404 signalr signalr-hub