Попробуйте указать, что вы обработали исключение, установив свойство ExceptionHandled
:
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.Exception is InvalidOperationException)
{
filterContext.ExceptionHandled = true;
var viewResult = new ViewResult();
viewResult.ViewData["ApplicationError"] = filterContext.Exception.Message;
filterContext.Result = viewResult;
}
}
Важным аспектом является то, что, поскольку внутри действия контроллера было исключение, оно не дошло до того, что был возвращен результат действия. Таким образом, вы больше не знаете, должно ли действие отображать представление, возвращать JSON, перенаправлять или что-то еще. Таким образом, вы можете предположить, что он хочет визуализировать представление, установив свойство filterContext.Result
. Очевидно, что если у вас есть модель представления, связанная с этим представлением, вы не сможете восстановить ее. Поэтому убедитесь, что ваше представление организовано таким образом, что если внутри ViewData["ApplicationError"]
что-то есть, даже не пытайтесь что-либо делать с вашей моделью представления, так как у вас ее не будет => помните, что ваше приложение упало в середине выполнение акции.