2010-07-27 4 views
2

Коротко:Как обрабатывать UnauthorizedRequest с помощью Ajax вызова в ASP.Net MVC2

У меня есть саб, классифицируемых AuthorizeAttribute в моей структуре, в которой я делаю пользовательские разрешения.

Я в процессе перехода от обычного рендеринга представления asp.net mvc к рендерингу Ajax через jQuery. Следовательно, каждая ссылка в приложении выполняет вызов ajax для получения данных.

Чтобы удовлетворить это, я преобразовал большую часть своих страниц в частичные представления, так что каждый запрос ajax получает только часть, которая должна быть обновлена ​​на странице.

Во время рендеринга обычного представления, когда запрос был несанкционирован, он перенаправлялся на страницу входа в систему, описанную в web.config. После преобразования в Ajax вещи немного отличаются, поскольку я не хочу разметки для страницы входа в запрос ajax, но хочу иметь структурированный ответ, чтобы я мог действовать соответственно внутри вызова ajax.

Для этого я считаю, что мне нужно переопределить метод HandleUnauthorizedRequest в классе класса ClassizeAttribute и установить filterContext.Result в результат json. Но при этом, как бы я мог различать несанкционированный запрос и успешный запрос, потому что с точки зрения ajax-вызовов оба являются успешными ответами; следовательно, будет обрабатываться в обработчике успеха.

Что было бы правильным способом справиться с этой проблемой?

ответ

6

Я только что понял, я могу фильтровать между обычными запросами и запросами ajax в HandleUnauthorized Метод запроса, который я переопределяю в подклассе AuthorizeAttribute. Таким образом, для запроса ajax я могу создать json-результат или что-то еще в этом отношении, и для обычных запросов он все равно отобразит страницу входа. код выглядит следующим образом:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      JsonResult UnauthorizedResult = new JsonResult(); 
      UnauthorizedResult.Data = "{ request : 'unauthorized' }"; 
      UnauthorizedResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
      filterContext.Result = UnauthorizedResult; 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 

еще не отметит свой вопрос решен, так что если кто-то может предложить лучший способ сделать это, я по-прежнему открыт для предложений.

+0

Хорошо, что это хорошо работает во время сеанса, как только сессия истекает, страница входа снова отправляется как ответ на запрос ajax, статус которого является успешным. Следовательно, мне нужно будет что-то сделать, чтобы обнаружить, что сессия истекла, есть ли какие-либо предложения? – Nosh

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