2009-11-07 5 views
9

Я внедрил AnitforgeryToken с моими форматами MVC asp.net, а также добавил атрибут к моей процедуре входа в систему, однако, когда проверка не удалась, я хочу перенаправить на мое действие мошенничества, страницу исключения. возможно ли это в атрибуте ????asp.net MVC antiforgerytoken on exception RedirectToAction

благодаря

ответ

10

ValidateAntiForgeryTokenAttribute просто бросить HttpAntiForgeryException. Вы можете использовать HandleErrorAttribute обрабатывать этот сценарий:

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

большое спасибо, вот что я искал. – davethecoder

14

В случае, если вы не хотите ставить [HandleError] атрибут всех действий, которые [ValidateAntiForgeryToken], вы можете добавить пользовательский фильтр для ваших глобальных фильтров:

в Global.asax под Application_Start():

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

, а затем:

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

комментарий, почему вы голосуете. – Dmitry

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