Для контекста у меня есть значение тайм-аута проверки подлинности с помощью форм, установленное в моем web.config, и я использую ASP.NET MVC 1. Я думаю, что проще всего сформулировать мою проблему как 2 варианта использования - первый из них, что происходит без проверки подлинности таймаут, а второй - что происходит с таймаутом аутентификации:
Обычный случай:
Пользователь входит в приложение, и таймер аутентификации начинает тикать. Пока период аутентификации еще действителен, пользователь щелкает что-то на странице, что вызывает вызов AJAX (через jQuery). Мы попадаем на сервер, обрабатываем запрос и возвращаем пользователю частичное представление (как ActionResult
). HTML передается как строка в метод успеха ajax, и я беру этот HTML и вставляю его в div на странице. Это все ожидаемо.
Время ожидания истекло.
Пользователь входит в приложение, и таймер аутентификации начинает тикать. По прошествии x промежутка времени период аутентификации истекает. По истечении срока действия пользователь нажимает на странице что-то, что вызывает вызов AJAX (с использованием jQuery). Мы попали на сервер, но срок действия билета аутентификации истек. .NET автоматически перенаправляет на значение loginURL
, определенное в том же элементе web.config, который устанавливает период ожидания. Для меня эта страница является страницей входа, где пользователя просят ввести имя пользователя / пароль для входа в систему. Таким образом, выполняется действие Home/Login
Controller, и в конечном итоге возвращается полное (а не частичное) представление в виде строки html для успеха ajax метод. Это приводит к тому, что страница взрывается, потому что я пытаюсь взять полный HTML-код страницы (с тегами <html>
и всем остальным) и вставить его в div на странице.
В этом и заключается моя проблема. Когда период аутентификации истек и .NET перенаправляет меня на страницу входа, я возвращаю полный HTML-код страницы методу успеха ajax. Конечно, все работает нормально, когда обращение к серверу не является вызовом AJAX - оно отлично перенаправляет на страницу входа. Но как я могу справиться с этим делом? У кого-нибудь есть идеи?
Спасибо.