Можно ли написать базовый класс для обработки исключения nullReferenceException со всех страниц? - PullRequest
0 голосов
/ 08 февраля 2012

Я использую .net Framework 4.0, обычный asp.net и работаю с веб-формой. В настоящее время у меня есть базовый класс для обработки всех параметров и перенаправления. Интересно, можно ли написать базовый класс для обработки исключения nullRefeerenceException со всех страниц за один раз, скажем, перенаправить конечного пользователя куда-либо или отобразить конкретное сообщение об ошибке.

Сценарий: например, некоторые страницы должны сопровождаться параметром, если параметр не записан, я бы хотел перенаправить их куда-нибудь.

Ответы [ 4 ]

2 голосов
/ 08 февраля 2012

Вы можете попытаться контролировать ProcessRequest. Вам нужно проверить его, чтобы узнать, сможет ли он выполнить ту работу, о которой вы просили, но это хороший момент, чтобы зафиксировать все ошибки вашей страницы.

public override void ProcessRequest(HttpContext context)
{
    try
    {
        base.ProcessRequest(context);
    }
    catch (Exception x)
    {
        // handle here your error from the page...
    }
}

Еще несколько заметок

Я использовал этот код на одной критической странице, но я не использую его для всей своей страницы. Даже если вы можете зафиксировать ошибки, иногда вы не можете ничего сделать здесь, кроме как снова выдать окончательную ошибку, так что в итоге лучше регистрировать ваши неизвестные и необработанные ошибки из globa.asax Application_Error, и на странице убедитесь, что что вы используете try/catch для обработки их там, где они происходят.

После некоторых размышлений, может быть, это не очень хорошая практика, чтобы использовать его. Хорошей практикой является использование try / catch в месте, где у вас могут быть броски, а не в общем случае.

Последний

Вы также получаете здесь ошибку throw, когда пользователь закрывает соединение до конца рендеринга, но если вы регистрируете ошибки, вы получаете то же самое на Application_Error - это не ошибка страницы.

    Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> 
   System.Web.HttpException: The remote host closed the connection. 
   The error code is 0x80072746.
2 голосов
/ 08 февраля 2012

В вас Global.asax, обработайте Application_Error.

1 голос
/ 08 февраля 2012

Когда сервер обрабатывает исключение NullReferenceException, создается ответ 500.Перенаправьте все ваши сообщения 500 сервера, как вы хотите.Это руководство поможет.

Полное руководство по обработке 500 ошибок в IIS6, IIS7, ASP.NET MVC3 с пользовательской страницей

0 голосов
/ 08 февраля 2012

Вы можете подключиться к каждому непокрытому исключению NullReference, в зависимости от того, что вы хотите сделать.

Например, вы можете использовать global.asax, чтобы указать событие Application_Error. Вы можете получить ссылку на исключение, найти тип и выполнить там перенаправление.

Еще один способ получить исключения - написать свой собственный поставщик ошибок, но это не даст вам возможности выполнить перенаправление.

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