2013-03-14 4 views
6
[Authorize] 
public class MyController : BaseController 
{ 
    [PermissionAuthorize] 
    public ActionResult GridData() 
    { 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 
} 

Я создал атрибут PermissionAuthoize для проверки разрешения пользователя на конкретное действие. У меня проблема После того, как пользовательский сеанс или билет истекает в то время, если пользователь отправляет ajax requrest на контроллер, тогда атрибут Authorize отклоняет запрос и возвращает его в виде html-формы для входа пользователю. Этот пользователь считает, что приложение не работает. его показывают плохое воздействие на пользователя.Как перенаправить unauthorize Ajax reqest на контроллер на страницу входа? ,

поэтому, я хочу перенаправить пользователя на страницу входа, если они отправят запрос ajax по истечении срока действия билета.

Могу ли я создать еще один атрибут авторизации для контроллера, это гуд?

+0

Дарина уже данный ответ здесь: http://stackoverflow.com/questions/5238854/handling-session-timeout-in-ajax-calls –

ответ

3

После кода может помочь вам:

$.ajax({ 
    url: 'url',  
    statusCode: { 
     404: function() { 
      //page not found 
     }, 
     200: function() { 
      //ok, do your stuff 
     }, 
     302: function() { 
      //redirect - check if url contains login and do redirect    
     } 
    } 
}) 

В принципе вы можете проверить только для перенаправлений и делать регулярные вещи в success/error обратных вызовов, но когда вы перенаправить заголовок HTTP вы измените window.location.href на нужную страницу входа

5

Первое, что вам нужно сделать, это настроить модуль проверки подлинности форм, чтобы остановить перенаправление на страницу входа в систему при загрузке 401. Фил Хаак написал nice article о том, как это может быть достигнуто.

Как только вы сделаете это, вы сможете захватить 401 код состояния HTTP на клиенте. Таким образом, вы могли бы написать global ajax handler, который будет перенаправлять на страницу входа в систему, когда 401 код статуса отправленного с сервера (который будет происходить, когда билет проверки подлинности форм истекает или пользователь не прошел проверку подлинности на всех):

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status == 401) { 
     // unauthorized 
     window.location.href = '/logon'; 
    } 
}); 
+1

Его gud способ обнаружить ошибку ajax, но в моем senerio я использую источник данных kendo ui в некоторых случаях как выпадающие данные и данные сетки. таким образом, я не обрабатываю ошибку ajax. – pargan

Смежные вопросы