如何在Asp.Net MVC 2中显示通用错误页面

时间:2010-06-17 01:09:07

标签: asp.net-mvc-2 error-handling

我的基本控制器中有以下内容:

    protected override void OnException(ExceptionContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        // If custom errors are disabled, we need to let the normal ASP.NET exception handler
        // execute so that the user can see useful debugging information.
        if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
        {
            return;
        }

        Exception exception = filterContext.Exception;

        // If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method),
        // ignore it.
        if (new HttpException(null, exception).GetHttpCode() != 500)
        {
            return;
        }
        // TODO: What is the namespace for ExceptionType?
        //if (!ExceptionType.IsInstanceOfType(exception))
        //{
        //    return;
        //}

        // Send Email
        MailException(exception);

        // TODO: What does this line do?
        base.OnException(filterContext);

        filterContext.Result = new ViewResult
        {
            ViewName = "Error"
        };
        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
        filterContext.HttpContext.Response.StatusCode = 500;
    }

在我的共享文件夹中,我有一个Error.aspx视图。

的Web.config

<customErrors mode="On" />

发生异常时,我仍然看到黄色屏幕。我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为调用base.OnException处理程序是导致问题的原因。在没有实际查看代码的情况下,我会想象它负责处理错误并生成具有异常和堆栈跟踪的响应。从代码中删除该行 - 因为您无论如何都要替换ViewResult,所以不需要它。

我建议您使用ELMAH并实现与其一起使用的HandleError属性:请参阅此question。 ELMAH非常灵活和配置驱动,而不是代码驱动。

答案 1 :(得分:0)

Server.ClearError()

如果你打电话会怎么样?