Я новичок в C# и asp mvc, и я не могу найти способ справиться с исключениями глобально, но возврат на ту же страницу из них был сгенерирован. Сейчас в моих контроллеров у меня есть что-то подобное во всех методах пост:asp mvc5 глобальный обработчик исключений на той же странице
try
{
service.Action(object);
return RedirectToAction("Index");
}
catch (MyBusinessException e)
{
ViewData["error"] = (e.InnerException.Message ?? "");
return View(object);
}
Сообщение внутреннего исключения является дружественным сообщение, как «Вы не можете создать две статьи с тем же кодом», что я хочу показать пользователю в виде создания статьи, а не отправить его на страницу с ошибкой
Я пытался воспроизвести это поведение, создав базовый контроллер, который переопределяет метод OnException, но я не знаю, как вернуться к на той же странице, откуда я пришел, и покажу сообщение об ошибке.
Редактировать на основе ответа от @JotaBe
Я создал глобальный OnException фильтр и зарегистрирован в FilterConfig.cs, теперь я могу вернуться на страницу с был я пришел, но модель, которую я получаю из ExceptionContext, она равна нулю, поэтому я получаю исключение NullPointerException при просмотре представления.
Это мой текущий метод:
public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
{
var currentController = (string)filterContext.RouteData.Values["controller"];
var currentActionName = (string)filterContext.RouteData.Values["action"];
LOGGER.ErrorFormat("Action: {0} - Controller: {1} - ExceptionMessage: {2} - InnerException: {3}",
currentActionName,
currentController,
filterContext.Exception.Message,
filterContext.Exception.InnerException.Message);
Exception e = filterContext.Exception;
filterContext.ExceptionHandled = true;
filterContext.Result = new ViewResult()
{
ViewName = currentActionName,
ViewData = filterContext.Controller.ViewData,
MasterName = Master,
TempData = filterContext.Controller.TempData
};
}
Как я могу получить модель, которая была размещена?
Можете ли вы предоставить еще один код здесь. –
Вы также можете использовать метод 'Application_Error' в global.asax и обрабатывать ошибку. –
Что такое «модель, которая была опубликована»? – JotaBe