System.Exception类型的异常未被处理

时间:2016-08-06 11:40:15

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

前言:请不要把我推荐给Elmah。我试图为自己理解MVC异常系统,而不仅仅是使用别人的系统。

我为了自己的充实而玩MVC的异常系统,我遇到了一个奇怪的异常。我编写了一个OnException方法,如下所示:

protected override void OnException(ExceptionContext filterContext)
{
    if (filterContext.ExceptionHandled == true)
    {
        return;
    }
    // log error
    ErrorLog(filterContext);

    // mark error as handled to prevent rethrow
    filterContext.ExceptionHandled = true;

    //show custom error page
    ViewBag.Code = filterContext.Exception is HttpException ? ((HttpException) filterContext.Exception).GetHttpCode() : 500;
    ViewBag.Exception = filterContext.Exception;
    filterContext.Result = View("Error");
}

我通过玩具控制器中的一个简单的调用来抛出它:

if(something strange and bad happens)
{
    throw new Exception("When in trouble or in doubt, run in circles, scream and shout.");
}

我测试了异常并得到以下异常:

  

发生System.Exception类型的异常,但未在用户代码中处理。

我发送到构造函数的字符串作为错误消息的一部分进入异常系统。当我继续执行错误时,我会使用该消息进入错误页面,但是当我尝试运行代码时,我不断收到上一个错误。内部异常细节为null,其余的异常细节太稀疏,以至于我无法使用它来弄清楚出了什么问题,或者我读了这个而不是在这里问。

我怀疑我得到了这个例外,因为我没有让基类完成处理原始异常,但我担心我不完全确定原因。我已经阅读了有关异常处理的各种文章,但是我没有遇到任何(我知道的)已向我解释是否需要让基类完成处理异常或者是否需要处理我已经完成了就足够了。我已经看到过自定义处理,或者两者都没有。

或者相反,如果我的怀疑是不正确的,而且完全是别的,那么有谁知道它可能是什么?抛出这种情况的情况非常简单,其他任何事情都不太可能影响到这一点。

有谁知道为什么我会收到此错误?

1 个答案:

答案 0 :(得分:1)

我们可以看到的代码看起来不错,所以我认为异常来自我们无法看到的ErrorLog方法。

您可能会收到错误,因为文件仍在使用中(您正确处理文件流吗?)或出于各种其他原因。

您的OnException方法会覆盖MVC的错误处理机制,因此在异常处理期间发生异常时,所有地狱都会崩溃。 MVC框架可能在某个地方有一个非常高的级别try { ... } catch { ... },只是为了保存应用程序不会崩溃,但是它无法提供有关发生的事情的更多信息。

确保您的visual studio调试器在抛出异常(https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx)时中断,然后执行您的代码。看一下抛出的异常和涉及的代码。您要么找到特定部分中断的原因,要么找到下一个StackOverflow问题的主题。 ;)