2009-11-07 29 views
9

Ho implorato l'AnitforgeryToken con i moduli asp.net MVC e ho anche aggiunto l'attributo alla mia procedura di accesso, tuttavia quando l'assegno fallisce desidero reindirizzare la mia azione fraudolenta piuttosto che un pagina di eccezione. è possibile questo all'interno dell'attributo ????asp.net MVC antiforgerytoken su eccezione RedirectToAction

grazie

risposta

10

Il ValidateAntiForgeryTokenAttribute sarà solo buttare HttpAntiForgeryException. È possibile utilizzare il HandleErrorAttribute per gestire questo scenario:

[HandleError(
    ExceptionType = typeof(HttpAntiForgeryException), 
    View = "Unauthorized")] 
[ValidateAntiForgeryToken] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SomeActionThatRequiresToken() 
{ 
    return View(); 
} 
+0

ringraziamento Questo è quello che stavo cercando. – davethecoder

14

Nel caso in cui non si vuole mettere [HandleError] attributo su tutte le azioni che hanno [ValidateAntiForgeryToken], è possibile aggiungere un filtro personalizzato per i filtri globali:

in Global.asax sotto Application_Start():

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

e poi:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
     filters.Add(new AntiForgeryTokenFilter()); 
    } 
} 

AntiForgeryTokenFilter.cs:

public class AntiForgeryTokenFilter : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if(filterContext.Exception.GetType() == typeof(HttpAntiForgeryException)) 
     { 
      filterContext.Result = new RedirectResult("/"); // whatever the url that you want to redirect to 
      filterContext.ExceptionHandled = true; 
     } 
    } 
} 
+0

commento perché giù voto. – Dmitry

Problemi correlati