Перенаправление на вызывающий контроллер и действие на HttpAntiForgeryException (ValidateAntiForgeryToken)

Когда возникает исключение HttpAntiForgeryException, при отправке любой из моих форм я хотел бы перенаправить пользователя обратно на чистую версию формы (с новым токеном) через исходный контроллер и действие, которое загрузило представление формы в первую очередь , и показать сообщение об ошибке.

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

На данный момент я рассматриваю возможность использования override void OnException(ExceptionContext filterContext) в своем BaseController, но не могу понять, как или, если смогу, получить действие и контроллер, вызвавшие исключение. Действие будет версией httppost, но будет иметь то же имя, что и исходное действие, загружающее представление формы.

Есть ли способ получить его из трассировки стека в filterContext.Exception?

Или есть лучший способ?

Или это глупая идея?

Большое спасибо за ваш вклад :)

Это для приложения MVC 4.Net 4.0.


person tekiegirl    schedule 10.07.2014    source источник


Ответы (1)


Я считаю, что следующее позаботится об исключении так, как вы описываете:

protected override void OnException(ExceptionContext filterContext)
{
    if (filterContext.Exception is HttpAntiForgeryException)
    {
        this.RedirectToAction(
            filterContext.RouteData.Values["action"].ToString(), 
            filterContext.RouteData.Values);
        filterContext.ExceptionHandled = true;
    }

    base.OnException(filterContext);
}

Альтернативой является использование атрибута HandleError, но это позволяет перенаправить только на заданное представление (обычно пользовательское представление ошибок). Наконец, можно создать собственный атрибут HandleError, реализуя интерфейс IExceptionFilter.

person m.casey    schedule 10.07.2014
comment
Большое спасибо. Это, кажется, перенаправляет меня к правильному контроллеру и действию, но просто показывает пустую страницу и не достигает точки останова, которую я поместил в действие, на которое он перенаправляется. - person tekiegirl; 11.07.2014