Как отобразить страницу с общей ошибкой в ​​Asp.Net MVC 2 - PullRequest
0 голосов
/ 17 июня 2010

В моем базовом контроллере есть следующее:

    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 View.

Web.config

<customErrors mode="On" />

Я все еще вижу желтый экран, когда происходит исключение. Что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 17 июня 2010
Server.ClearError()

Что произойдет, если вы позвоните так?

0 голосов
/ 17 июня 2010

Я полагаю, что вызывая base.OnException, обработчик является причиной вашей проблемы. На самом деле, не глядя на код, я бы предположил, что именно он отвечает за обработку ошибки и генерирует ответ с исключением и трассировкой стека. Удалите эту строку из своего кода - это не нужно, поскольку вы все равно заменяете ViewResult.

Я бы порекомендовал вам использовать ELMAH и реализовать атрибут HandleError, который работает с ним: см. Этот вопрос . ELMAH очень гибок и ориентирован на конфигурацию, а не на код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...