Используя технику, которую я нашел в одной из недавних книг ASP.NET MVC, у меня есть метод действия на контроллере, который возвращает частичное представление для запроса ajax и полный результат действия для обычного запроса get - он проверяет свойство IsAjaxRequest объекта Request, чтобы определить, какой тип actionresult возвращается. Частичное представление, возвращаемое методом действия, возвращает HTML для отображения таблицы записей из базы данных. Контроллер, который содержит метод действия, помечен атрибутом Authorize, так что только зарегистрированные пользователи могут вызывать методы контроллера. Я использую аутентификацию форм с 30-минутным таймаутом и скользящим сроком действия.
Проблема возникает после того, как истекло 30-минутное время ожидания пользователя. Поскольку контроллер помечен атрибутом Authorize, вызов метода действия после истечения срока действия перенаправляет пользователя на страницу входа. Однако, поскольку это ajax-вызов, HTML-код моей страницы входа возвращается и отображается в середине страницы, которая должна содержать таблицу записей HTML, которая обычно возвращается методом действия в частичном представлении. Вызов ajax на самом деле не дает сбоя, просто возвращает html для неправильной страницы.
Кто-нибудь сталкивался и имел дело с этой проблемой? Я пытаюсь избежать перемещения всего моего серверного кода, который обрабатывает вызовы ajax, в отдельный контроллер, который не требует аутентифицированного пользователя, но на данный момент это кажется моей единственной альтернативой. Даже это не приведет к поведению, которое я ожидаю, потому что оно позволит пользователю продолжать использовать веб-страницу даже после того, как истечет 30-минутный тайм-аут - он не будет перенаправлен на страницу входа.
Спасибо за любой совет.
Редактировать
Казалось бы, приведенное ниже решение с пользовательским атрибутом AuthorizeAttribute направило меня в правильном направлении, но я даже не могу добраться до этого кода. Похоже, что код в пользовательском атрибуте AuthorizeAttribute никогда не достигается после истечения времени ожидания. Кажется, что аутентификация форм вызывает перенаправление на страницу входа задолго до кода атрибута. Пользовательский AuthorizeAttribute является единственным на моем контроллере. У меня также есть следующие значения web.config (значение тайм-аута установлено очень низким, чтобы вызвать тайм-аут для тестирования):
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1" slidingExpiration="true" defaultUrl="~/ErrorReport/Index" requireSSL="true" protection="All"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
<location path="Content">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="Scripts">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Мешают ли элементы 1017 * web.config? Разве я не должен использовать их с ASP.NET MVC?