开发者

How to display a generic error page in Asp.Net MVC 2

I have the following in my base controller:

    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;
    }

In my Shared folde开发者_如何转开发r, I have an Error.aspx View.

Web.config

<customErrors mode="On" />

I am still seeing the yellow screen when an exception occurs. What am I doing incorrectly?


I would imagine that invoking base.OnException handler is what is causing your problem. Without actually looking at the code, I would imagine that it is what is responsible for handling the error and generating a response with the exception and stack trace. Remove that line from your code -- it's not needed as since you're replacing the ViewResult anyway.

I would recommend that you use ELMAH and implement a HandleError attribute that works with it: see this question. ELMAH is very flexible and configuration driven, rather than code driven.


Server.ClearError()

What happens if you call that?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜