1

Я использую Application_Error в классе Global для обработки 404s.Обработка ошибок Global.cs с использованием System.Net.Mail

Когда поймано 404, я отправляю электронное письмо с целью его регистрации. Для этого я вызываю статический метод для записи ошибки.

ErrorHandler.WriteError(Exception ex) 

В этом методе я создаю новый экземпляр моего EmailHandler для того, чтобы инициализировать System.Net.Mail класса. В моем EmailHandler объекта У меня есть закрытый член

private MailMessage m_mail = null; 

В конструкторе EmailHandler класса я создаю новый MailMesage экземпляра для того, чтобы построить электронную почту.

public EmailHandler() 
{ 
    m_mail = new MailMessage(); 
} 

На данный момент я получаю следующее сообщение об ошибке.

System.Security.Cryptography.CryptographicException 
"The handle is invalid." 

мне нужно отметить, что это происходит только тогда, когда запрос только конкретный файл (например, как www.mysite.com/random-incorrect-image.jpg).

Это не произойдет, когда я прошу страницы, как www.mysite.com/random-incorrect-page.aspx

+0

Какова ваша версия IIS и как точно настроить 404 отлов? Через выполнение страницы с ошибкой? – jbl

+0

@jbl Я просто запускаю это на сервере разработки asp.net vs2010 на данный момент. Я захватил 404, получив HttpException с последней ошибки сервера. Из HttpException вы можете получить код ошибки. – David

+0

Но, поскольку 404 на статических файлах не обрабатываются через asp.net, где, и когда в вашем коде вы вызываете System.Web.HttpContext.Current.Server.GetLastError()? – jbl

ответ

0

Может быть, вы должны попробовать следующее для статического файла 404:

Настройка пользовательских 404 в вашем web.config

<system.webServer> 
    <httpErrors> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <error statusCode="404" prefixLanguageFilePath="" path="/yourpath/yourcustom404.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 

404 Перенаправление для статических файлов будет происходить в http://www.mysite.com/yourpath/yourcustom404.aspx?404;http://www.mysite.com/random-incorrect-image.jpg

Вы можете затем обработать строку запроса для извлечения URL в Pageload из custom404.aspx, отправлять электронную почту, а также отображать дружественное сообщение

Вы можете сделать то же самое для ASPX страниц. В вашем web.config:

<customErrors mode="On"> 
    <error statusCode="404" redirect="/yourpath/yourcustom404.aspx" />  
</customErrors> 

переназначение будет немного отличаться, хотя:

http://www.mysite.com/yourpath/yourcustom404.aspx?aspxerrorpath=/random-incorrect-page.aspx

Смежные вопросы