Как добавить свои собственные данные в исключение в MVC? - PullRequest
1 голос
/ 18 августа 2010

Уилл Обработка ошибок 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, но как мне создать правильный вид в зависимости от того, с какого контроллера он пришел?

1 Ответ

1 голос
/ 18 августа 2010

Если вы хотите добавить дополнительную информацию в зарегистрированное сообщение, создайте пользовательское исключение и добавьте дополнительные свойства для информации, которую вы хотите собрать. Некоторые регистраторы регистрируют возвратный вызов метода ToString () или регистрируют только сообщение, поэтому я не знаю, что делает ELMAH. Скорее всего, делать ToString (), поэтому, если в исключении вы переопределяете ToSTring (), чтобы добавить туда дополнительную информацию, это следует добавить к сообщению в журнале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...