繁体   English   中英

在MVC 5应用程序上找不到SignalR / signalr / hubs 403(单个用户帐户身份验证)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM