Уилл Обработка ошибок post - это круто! Я еще не использую ELMAH, но я хотел бы начать добавлять некоторые из моих собственных данных в Исключение для каждого контроллера. Прямо сейчас у меня есть базовый контроллер, переопределяющий OnException(ExceptionContext)
согласно Уиллу, от которого наследуются все контроллеры проекта.
Кажется, я понимаю, что мне нужно настроить еще одно OnException
переопределение на каждом контроллере, но как мне передать данные в это исключение? Данные, которые мне нужны, не всегда могут быть одним текстовым значением.
- Должен ли я выдавать пользовательские исключения?
- Должен ли я генерировать общие
Exception(string)
исключения и каким-либо образом получать к ним доступ в переопределении?
Редактировать
Это может звучать глупо, но есть ли способ справиться с необработанной ошибкой и по-прежнему добывать эту информацию? Если нет, то единственное решение, которое я вижу, - это создание собственного экземпляра Exception в начале каждого метода Controller для удаленной возможности того, что он понадобится. Это единственный способ?
Другое редактирование
Per Потерян в записи Tangent (и часть 2), я изменил этот класс CustomFactory и зарегистрировал его в Global.asax. Ссылки в его посте на base.requestContext были недействительными.
public class CustomFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
var controller = (Controller)base.GetControllerInstance(requestContext, controllerType);
controller.ActionInvoker =
new CustomControllerActionInvoker(new ControllerContext(requestContext, controller));
return controller;
}
}
Затем в моем классе CustomControllerActionInvoker я переопределяю InvokeAction:
public override bool InvokeAction(ControllerContext controllerContext, string actionName)
{
try
{
return base.InvokeAction(controllerContext, actionName);
}
catch (Exception)
{
throw;
}
}
Я думаю, что в блоке catch Брайан предлагает создать ViewResult, но как мне создать правильный вид в зависимости от того, с какого контроллера он пришел?