Asp.net-Mvc-4

/signalr/hubs 未在 asp.net mvc4 中載入:拋出 404

  • February 2, 2017

這就是我所做的。

  1. 我使用 nuget 為我的 MVC4 項目獲取 SignalR。
  2. 在我的控制器中創建了一個 MyHub 類(SignalRTestController.cs)
  3. 在索引操作中,嘗試從集線器外部廣播消息並返回視圖。
  4. 在視圖中,引用了所有腳本和 /signalr/hubs。

問題是找不到 /signalr/hubs(拋出 404)。

我的項目有區域,結構如下所示:

  1. MVC項目
  • 領域

    • 子文件夾

      • 控制器

        • SignalRTestController.cs
      • 模型

      • 看法

        • 索引.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

腳本類型=“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 not found。

我不確定出了什麼問題。我認為這可能是一個路由問題。我不確定,如果我們需要在項目中為 /signalr/hubs 添加任何路由資訊,或者我在這裡遺漏了什麼。

僅供參考:當我創建一個新的空 MVC 項目並添加 signalR 並開始處理它時,它工作得非常好。無需添加路由。

另外,我在某些地方同時使用預設路由和屬性路由。但是控制器 SignalRTestController 不使用屬性路由。

你有呼叫 RouteTable.Routes.MapHubs()(可能在 Global.asax 中)嗎?如果是這樣,請嘗試擺脫它並查看它是否可以解決您的問題。– 皮特 11 月 16 日 17:22

我一直在玩它。看來在目前版本中(我得到了最新的原始碼,因為我需要一個簽名的程序集),你必須呼叫 RouteTable.Routes.MapHubs()。但要使其工作,必須首先呼叫它(或至少在 RouteConfig.RegisterRoutes() 呼叫之前)。如果在此之後呼叫它,MVC 會為其尋找控制器,但這是行不通的。在我使用的通過 nuGet 獲得的早期版本中,刪除 RouteTable.Routes.MapHubs() 可以解決問題,但現在似乎是必需的。希望這會有所幫助。- 皮特 11 月 27 日 20:53


顯然,您通過將 RouteTable.Routes.MapHubs() 更改為:RouteTable.Routes.MapHubs("~/signalr") 解決了這個問題。

引用自:https://stackoverflow.com/questions/12624615