[英]SignalR /signalr/hubs 403 Not found on MVC 5 Application (Individual user accounts authentication)
我已经基于个人用户身份验证创建了MVC 5 Web应用程序。
我已经在asp.net文章中阅读了http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc,表明无需分别创建startup.cs个人用户身份验证类型的应用程序。 所以我添加了app.MapSignalR(); 内部的ConfigureAuth方法位于App_Start> Startup.Auth.cs文件中。
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
}); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.MapSignalR();}
在视图页面中,我添加了以下参考
<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="~/signalr/hubs"></script>
但是在运行时,我收到了/ Signalr / hubs js文件的403 Not found错误。 如何解决。
您确定您的app.MapSignalR()
被调用了吗?
我不确定它是否可以与ConfigureAuth内的命令配合使用,但是我会尝试制作一个单独的启动文件,如本文所述:
using Owin;
using Microsoft.Owin;
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
}
尝试将其放在单独的文件中,看看它是否对您有用。
另外,您的Application_Start方法看起来像这样吗?
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteTable.Routes.MapHubs();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
我发现,调用注册方法的顺序很重要,因此请确保正确放置它们,并确保调用了RouteTable.Routes.MapHubs()
方法。
我已经尝试过了,并且有效。
这是我的示例应用程序
cshtml文件
<script type="text/javascript" src="~/scripts/jquery.signalR-2.2.0.js"></script>
<script type="text/javascript" src="~/signalr/hubs"></script>
<script>
$(function () {
debugger;
var chat = $.connection.signalhub;
chat.client.Send = function (msg) {
debugger;
$("#message").append(msg);
}
$("#btnSend").click(function () {
debugger;
chat.server.broadcastMessage($("#txtmessage").val());
$('#txtmessage').val('').focus();
});
$.connection.hub.start();
});
</script>
<div class="row" id="message">
</div>
<input type="text" name="txtmessage" id="txtmessage" />
<button name="btnSend" id="btnSend">Send</button>
这是我的SignalRHub
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace SignalR.Code
{
[HubName("signalhub")]
public class SignalRHub : Hub
{
public void BroadcastMessage(string message)
{
Clients.Client(Context.ConnectionId).Send(message);
}
}
}
这是我的Startup.Auth.cs文件
using Microsoft.AspNet.Identity;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;
namespace SignalR
{
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
app.MapSignalR();
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
}
}
另外我建议检查您使用的JQuery版本,并确定您的项目在哪里?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.