1

我正在使用 Global 类中的 Application_Error 来处理 404。

一旦 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这样的页面时,它不会发生

4

1 回答 1

0

也许您应该对静态文件 404 尝试以下操作:

在 web.config 中配置自定义 404

<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

然后你可以处理queryString来提取custom404.aspx的pageLoad中的url,发送你的email,并显示一条友好的消息

您可以对 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

于 2012-04-11T15:31:04.527 回答