2013-04-08 3 views
3

Я проходил класс Controller в ASP.NET MVC и выяснил, что он реализует интерфейс IAuthenticationFilter. Однако я не могу понять, как я могу реализовать, его методы OnAuthentication() и OnAuthenticationChallenge(), в моем контроллере и когда они будут вызваны.Выполнение интерфейса IAuthenticationFilter в asp.net MVC

Будет очень полезно, если кто-нибудь сможет объяснить это мне или поделиться со мной ссылкой, которая объясняет это. Даже я не смог найти какой-либо ресурс в MSDN.

+1

Вы не найдете никаких документов, так как упомянутый 'интерфейс IAuthenticationFilter' был добавлен в ASP.NET MVC две недели назад (22 марта): http://aspnetwebstack.codeplex.com/SourceControl/ changeet/178ec82f90f056f958994903fe0998d3e127a0cb – nemesv

+0

@nemesv - О да, спасибо за ответ, моя ошибка. – Bibhu

ответ

2

Вы можете использовать для временного изменения объекта HttpContext.User Iprincipal с собственным значением. Только нужно передать новый IPrincipal через AuthenticationContext. Я думаю, что будет полезно действовать от имени другого пользователя (временно). Например: когда заменить кого-то на праздник или на стадии разработки. Таким образом, вы можете использовать в VS2013 проект MVC 5 для предварительного просмотра.

Например, в контроллере (как IAuthenticationFilter):

protected override void OnAuthentication(System.Web.Mvc.Filters.AuthenticationContext filterContext) 
{ 

//fill userPrincipal… 

    filterContext.Principal = new RolePrincipal(userPrincipal); 

    //Or pass an ActionResult, if you want 

    filterContext.Result = new RedirectResult("http://www.stackoverflow.com"); 

} 
6

Использование OnAuthentication для установки или модификации основной для текущего запроса.

Используйте OnAuthenticationChallenge для проверки текущего принципала и разрешения на выполнение текущего запроса. Например:

public class CustomAuthenticatioFilter : ActionFilterAttribute, IAuthenticationFilter 
{ 
    public void OnAuthentication(AuthenticationContext filterContext) 
    { 
     //Here you are setting current principal 
     filterContext.Principal = new ClaimsPrincipal(); 
    } 

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext) 
    { 
     //Here you're checking current action and redirecting to ErrorPage 
     filterContext.Result = new RedirectToRouteResult("ErrorPage",null); 
    } 
} 
+1

Если только в документации MSDN для 'IAuthenticationFilter' были включены ваши первые два предложения! –

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