ASP.NET MVC - не удалось загрузить ресурс в Response.Redirect - PullRequest
0 голосов
/ 15 февраля 2012

Я заметил, что если на моем сайте истек срок действия моего сеанса, а затем я щелкнул Ajax.ActionLink, страница входа будет отображаться в PartialView.Я создал переопределение метода OnActionExecuting следующим образом:

    protected override void OnActionExecuting(ActionExecutingContext ctx)
    {
        if (!ctx.HttpContext.User.Identity.IsAuthenticated)
        {
            if (ctx.RequestContext.HttpContext.Request.IsAjaxRequest())
            {
                //ctx.RequestContext.HttpContext.Response.RedirectToRoute(new { controller = "Account", action = "LogOn" });
                ctx.RequestContext.HttpContext.Response.Redirect(Url.RouteUrl(new { controller = "Account", action = "LogOn" }));
            }
        }
    }

Это проверяет, прошел ли пользователь проверку подлинности, а затем, если запрос является AjaxRequest.Затем он перенаправит пользователя к методу LogOn в моем контроллере учетной записи, если они больше не аутентифицированы для AJAX-ссылки.Проблема в том, что в консоли появляется сообщение «Не удалось загрузить ресурс».

1 Ответ

1 голос
/ 15 февраля 2012

Это проверяет, прошел ли Аутентификация пользователя, а затем, если запрос является AjaxRequest.Затем он перенаправит пользователя к методу LogOn в моем контроллере учетной записи, если они больше не аутентифицированы для Ajax actionlink

Да, но если вы настроили Ajax.ActionLink или Ajax.BeginForm для обновлениянекоторый элемент DOM с результатами AJAX-запроса, использующего AjaxOptions, на самом деле не имеет значения, перенаправляете ли вы на сервер.AJAX-запрос просто следует за перенаправлением и вставляет полученный HTML-код (/ Account / LogOn), перенаправленный в элемент DOM.

Таким образом, перенаправление из AJAX-запроса не решит вашу проблему.Как вы знаете, весь смысл запроса AJAX заключается в том, чтобы оставаться на одной странице (адресная строка никогда не меняется).

Если вы хотите правильно обработать условие cookie cookie проверки подлинности *1013* надлежащим образом в ваших AJAX-запросах, вам придется выполнить перенаправление на клиенте (используя window.location.href).Чтобы достичь этого, вы можете взглянуть на следующий пост в блоге , в котором Фил Хаак предлагает отличную технику, позволяющую вашему серверу отправлять код состояния HTTP 401 в этом случае вместо перенаправления.Затем на клиенте вы можете перехватить этот код (например, подписавшись на глобальный обработчик AJAX) и перенаправить клиенту страницу входа в систему.

...