SignalR/signalr / hubs 403 не найден в приложении MVC 5 (Проверка подлинности учетных записей отдельных пользователей)

Я создал веб-приложение MVC 5 на основе аутентификации отдельного пользователя.

Я прочитал в asp.net артикул
http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc показывает отсутствие потребности создать запуск.cs отдельно для приложения типа аутентификации отдельного пользователя.
Поэтому я добавил приложение.MapSignalR (); внутри метода ConfigureAuth находятся в App_Start>Startup.Автор.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>

Но во время выполнения я получаю 403 не найдена ошибка для/Signalr / hubs JS файла.
Как это решить.

2 ответа

  1. Вы уверены, что ваш 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()метод.

  2. Я пробовал это, и это работает.

    Вот мой пример приложения

    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);
            }
        }
    }
    

    И вот мой стартап.Автор.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 вы использовали, и вы определили, что где-то ваш проект?