在Action Method中抛出异常时,它会再次调用Action方法吗?

时间:2014-05-15 14:15:09

标签: c# asp.net-mvc exception-handling

我将ViewData传递给主视图,它们也在子视图中使用(它们从主视图传播)。 我们已经定制了HandleErrorAttribute

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
    public override void OnException(ExceptionContext context)
    {
        base.OnException(context);

        var e = context.Exception;
        if (!context.ExceptionHandled   
            || RaiseErrorSignal(e)      
            || IsFiltered(context))     
            return;

        LogException(e);
    }

使用相同的主视图发送给客户错误视图。 RaiseErrorSignal(e)向Elmah发送错误。 发生异常时,ViewData不会传递给母版页,而是会导致另一个异常。我在主视图中修复了异常,并为测试目的引入了异常操作方法:

Logger.Debug("Introducing bug in HomeController - About....");
        Logger.DebugFormat("Request url: {0}, Request refferer: {1}", Request.Url, Request.UrlReferrer);
        int b = 0;
        int a = 1 / b;

然后我终于意识到在操作中抛出异常后,使用null ViewData渲染母版页,然后再次调用action方法!这是一个日志 - 我不得不在这里更改网址"请求的网址":

2014-05-15 14:04:43.087 [DEBUG] [21]:在HomeController中介绍bug - 关于....

2014-05-15 14:04:43.088 [DEBUG] [21]:请求网址:"请求的网址",请求引用者:"请求的网址"

2014-05-15 14:04:43.453 [DEBUG] [21]:为网址渲染母版页:"请求网址" ...

2014-05-15 14:04:43.454 [ERROR] [21]:母版页:ViewData为空......

2014-05-15 14:04:44.769 [DEBUG] [21]:渲染母版页完成....

2014-05-15 14:04:48.603 [DEBUG] [20]:在HomeController中介绍bug - 关于....

2014-05-15 14:04:48.603 [DEBUG] [20]:请求网址:"请求的网址",请求引用:(空)

2014-05-15 14:04:48.804 [DEBUG] [20]:为网址渲染母版页:"请求网址" ...

2014-05-15 14:04:48.804 [ERROR] [20]:母版页:ViewData为空......

2014-05-15 14:04:48.904 [DEBUG] [20]:渲染母版页完成....

有人可以解释一下吗?为什么在出现异常时动作方法会被击中两次?

客户端收到错误视图(只有一次),在elmah我们得到两次DivideByZero异常...

0 个答案:

没有答案