2010-09-24 4 views
0

У меня есть следующий метод действий:Проблем с HandleError

[HandleFtmsError] 
    public ActionResult PerformanceChart(ChartViewModel chart) 
    { 
     var x = 1; 
     var y = 0; 
     var z = x/y; 
     return Json(""); 
    } 

где HaneleFtmsError определяются как:

public class HandleFtmsErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext context) 
    { 
     base.OnException(context); 
     if (context.ExceptionHandled) 
      RaiseErrorSignal(context.Exception); 
    } 

    private static void RaiseErrorSignal(Exception e) 
    { 
     var context = HttpContext.Current; 
     ErrorSignal.FromContext(context).Raise(e, context); 
    } 
} 

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

ответ

0

Когда вы говорите «разрывы кода», вы имеете в виду, что он врезался в отладчик? Вероятно, это просто стандартное поведение отладчика, которое вы можете изменить через пункт «Исключения ...» отладки. Если вы снова нажмете F5 или запустите без отладки, вы увидите, какое поведение вы ожидаете.

MVC не мешает исключению исключения (что и ищет отладчик) - он просто обрабатывает исключение, замечая атрибут на контроллере и передавая информацию соответствующим образом. В тот момент, когда в отладчике ворвался, у него еще не было шанса сделать это.

+0

Привет, Джон, я имел в виду, что код взломал отладчик. Когда я нажал F5, я ожидал, что остановимся в точке останова, которую я установил в методе 'RaiseErrorSignal'. Но этого не происходит, поэтому я подумал, что это говорит о том, что он не работает. – DaveDev

+0

@DaveDev: Нет, попробуйте просто нажать F5, чтобы он продолжал идти, или изменить различие на нулевое исключение, чтобы * не * вломиться в отладчик, чтобы MVC мог справиться с этим без отладки, мешающего ему. –