Как игнорировать ошибки регистрации изображений в глобальном asax

У меня есть обработчик ошибок в моем файле global.asax следующим образом:

  Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when an unhandled error occurs
        Dim ex = Server.GetLastError.GetBaseException
        Dim lastErrorWrapper As HttpException = Server.GetLastError()
        Dim lastError As Exception = lastErrorWrapper

        If lastErrorWrapper.InnerException IsNot Nothing Then
            lastError = lastErrorWrapper.InnerException
        End If

        My.ErrorHandler.LogError( _
            "<BR/><BR/>URL: " & Request.RawUrl & _
            "<BR/><BR/>STACK: " & ex.StackTrace & _
            "<BR/><BR/>SOURCE: " & ex.Source & _
            "<BR/><BR/>MESSAGE: " & ex.Message & _
            "<BR/><BR/>TYPENAME: " & ex.GetType.ToString & _
            "<BR/><BR/>INNER EXCEPTION: " & lastError.ToString & _
            "<BR/><BR/>REFERRER: " & HttpContext.Current.Request.Url.AbsoluteUri & _
            "<BR/><BR/>USER IP: " & Request.ServerVariables("REMOTE_ADDR") & " -- " & Request.ServerVariables("HTTP_USER_AGENT"))
    End Sub

Очевидно, это прекрасно работает и отправляет мне электронное письмо всякий раз, когда возникает ошибка. Но это справедливо и для любых изображений, которых нет в файловой системе. Выдает "Файл не существует". ошибка. Есть ли способ игнорировать ошибки регистрации для изображений, которые не расположены на диске?


person Subliminal Hash    schedule 18.12.2012    source источник
comment
На самом деле это не ответ, так как это большое отклонение от вашего текущего решения, но с ELMAH (модули регистрации ошибок и обработчики) вы можете настроить этот и многие другие аспекты регистрации ошибок.   -  person Michiel van Oosterhout    schedule 24.12.2012
comment
@michielvoo вот как я столкнулся с этой проблемой. с NuGet было довольно легко загрузить ELMAH и настроить его всего за 10 секунд.   -  person Subliminal Hash    schedule 20.02.2013


Ответы (2)


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

if(Server.GetLastError().GetBaseException() is System.Web.HttpException)
{
     //You could check whether the 
     //Server.GetLastError().GetBaseException().Message contains the appropriate message
     Debug.WriteLine("Suppressed FileNotFoundException");
}else
//Log an unhandled exception
person Jonathan    schedule 21.12.2012

Я знаю, что это звучит очень просто или очень просто, или вы можете поискать код ошибки, но я так и делаю — просто проверяю, содержит ли ошибка сообщение dose not exist:

lastErrorWrapper.ToString().Contains("does not exist.")
person Aristos    schedule 18.12.2012
comment
У меня такая же проблема на самом деле. Есть ли способ получить имя ресурса, который отсутствует (не существует)? Иногда несуществующие страницы необходимо отправить мне по электронной почте, чтобы можно было провести расследование. - person Clarice Bouwer; 21.12.2012
comment
@kleinkie Я регистрирую полную ошибку и проверяю их. Я предлагаю вам просто зарегистрировать это, а не отправлять по электронной почте, потому что, если кто-то по какой-либо причине начнет пытаться загрузить много несуществующих страниц, вы будете заполнены электронными письмами. На моем сервере каждую неделю сотни таких строк отсутствуют. - person Aristos; 21.12.2012
comment
Спасибо, я так и делаю, просто иногда забываю проверить ошибки. Я просто буду писать простой ежедневный отчет, который будет автоматически приходить мне по электронной почте, чтобы я мог проверить наличие подозрительных ошибок. знак равно - person Clarice Bouwer; 21.12.2012