是的,所以我看到了很多与此相关的问题,但建议的修复方案都对我不起作用。
我有一个在 Visual Studio 2012/IIS Express 中运行的 MVC4 项目,使用 SignalR 向用户提供一些反馈。当我运行该项目时,我在 Chrome 中收到 403 错误,如下所示:
Failed to load resource: the server responded with a status of 403 (Forbidden) http://{website}/Hubs/
Uncaught Error: SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>.
显然我已经将我机器上的实际域更改为 {website}
现在,最初我将它放在 Web 项目根目录中名为 signalr 的文件夹中,其中包含 hubs 子文件夹,但后来我在 SignalR GitHub 上读到,你不应该这样做,所以我将其更改为“Hubs”。还是没修好。
我还看到了有关放置 RouteTable.Routes.MapHubs(); 的修复以正确的顺序。我的看起来像这样:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteTable.Routes.MapHubs();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
我还看到一些人建议将路线作为参数传递到 MapHubs() 方法中,但这需要一个字符串和一个 HubConfiguration 对象作为参数,因此这也不起作用。
我的视图代码如下所示:
@using(Html.BeginForm("Report", "Home", FormMethod.Post, new { enctype="multipart/form-data" }))
{
@Html.ValidationSummary(true);
<div>
@(InputExtensions.Hidden(Html, "submittingUserId", ViewBag.CurrentUser))
@(InputExtensions.Hidden(Html, "signalConnectionId"))
<br />
@Html.EditorFor(model => model.UploadedFile)
@Html.ValidationMessageFor(model => model.UploadedFile)
</div>
<div>
<input id="subButton" type="submit" value="UploadFile" title="Upload File" />
</div>
}
@section Scripts {
@Scripts.Render("~/Scripts/jquery.signalR-1.1.1.min.js")
@Scripts.Render("~/Hubs")
<script type="text/javascript">
$(document).ready(function () {
var accountMovementMoveHub = $.connection.accountMovementHub;
$("#signalConnectionId").val($.connection.connectionId);
$.connection.hub.updateProgress = function (message) {
$("#progress-list").append('<li>' + message + '</li>');
};
$.connection.hub.start();
});
</script>
}
我还将这些元素添加到 web.config 中:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
这让我简直要疯了,我已经尝试了在这里、github 和其他任何地方能找到的所有建议:(
任何帮助将不胜感激!
Thanks
ANSWER
事实证明,我假设对 /signalr/hubs 的脚本引用是包含集线器的 PHYSICAL 文件夹。但事实并非如此;它是对虚拟目录的引用,这就是为什么如果您还有一个名为 SignalR 的物理文件夹,它会感到困惑。我将 hubs 文件夹移至我的业务项目,并将脚本引用设置回“/signalr/hubs”,然后一切就开始工作了。
很抱歉这个愚蠢的问题并感谢您的回答。