2015-10-07 3 views
1

У меня есть приложение MVC Asp.net, которое использует WSFederationAuthentication для управления аутентификацией. Я делаю серию вызовов внутри действия контроллера, и эти вызовы могут привести к необходимости повторной аутентификации. Прямо сейчас, когда я определяю, что мне нужно повторить проверку подлинности, я бросаю исключение UnauthorizedAccessException.Перенаправление принудительной федеративной аутентификации из фильтра исключения

Я реализовал ExceptionFilter для контроллера, который улавливает этот UnauthroizedAccessException и возвращает 401. Вот код:

public void OnException(System.Web.Mvc.ExceptionContext context) 
{ 
    if (context.Exception is UnauthorizedAccessException) 
    { 
     context.Result = new HttpUnauthorizedResult("Login again."); 
     context.ExceptionHandled = true; 
     return; 
    } 
} 

Проблема заключается в том, что проверка подлинности Федеративные HttpModule не перенаправляет этот запрос на СТС , Пользователь просто получает ошибку 401. Является ли ExceptionFilter слишком поздно в конвейере для возврата 401? Есть ли другой способ заставить пользователя снова пройти проверку подлинности?

ответ

0

Перенаправление пользователя на страницу входа, если UnauthroizedAccessException произошло:

public void OnException(System.Web.Mvc.ExceptionContext context) 
{ 
    if (context.Exception is UnauthorizedAccessException) 
    { 
     // Redirect to login page again 

     // 1 
     filterContext.Result = new RedirectToRouteResult(
     new RouteValueDictionary {{ "Controller", "YourController" }, 
            { "Action", "YourAction" } }); 
     // 2 
     Controller controller = filterContext.Controller as Controller; 
     if (controller != null) 
     { 
      filterContext.Cancel = true; 
      controller.HttpContext.Response.Redirect("./Login"); 
     } 

     context.ExceptionHandled = true; 
    } 
    base.OnException(filterContext); 
} 
+0

Это не работает, потому что «это» не является контроллером. ExceptionFilter реализован как собственный класс, и RedirectToAction не представляется доступным. – Corez

+0

Ответ обновлен. –

+0

Я пошел с № 1 выше. Отлично. Благодаря! – Corez

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