.net - Elmah-捕获错误,但仍然记录并发送电子邮件?

标签 .net asp.net vb.net elmah

首先,我发现您可以捕获它并将其记录在捕获中,但这不会发送电子邮件。
然后,我发现了有关使用Error Signal类的信息。那行得通,但是从阅读中看不出来的是,它像对待正常错误一样对待错误,因此当我向错误发出信号时,错误仍然转到自定义错误页面,我不希望这种情况发生。

我想要做的就是捕获该错误,记录该错误,发送电子邮件,但是将错误发生的原因留在页面上,以便我提供特别的反馈。我不希望它转到自定义错误页面。

我该怎么做?

编辑:这就是我所拥有的,它将我重定向到自定义错误页面。

    Try
        smtpClient.Send(mailMessage)
    Catch smtpEx As SmtpException
        errorSignal.FromCurrentContext().Raise(smtpEx)
    Catch ex As Exception
        errorSignal.FromCurrentContext().Raise(ex)          
    End Try

编辑:发布涉及Elmah的web.config部分(除了连接字符串hah)
而且,我的Global.asax文件中没有涉及Elmah的内容。
  <configSections>
    <sectionGroup name="elmah">
        <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
        <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
        <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
        <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
</configSections> 
 <elmah>
<security allowRemoteAccess="1" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="Elmah.Sql" applicationName="Web Main" />
<errorMail from="xxx" to="xxx" cc="xxx" subject="main website error" async="true" smtpPort="25" smtpServer="xxx" userName="xxx" password="xxx" />
<errorFilter>
  <test>
    <and>
      <equal binding="HttpStatusCode" value="404" type="Int32" />
      <regex binding="FilterSourceType.Name" pattern="mail" />
    </and>
  </test>
</errorFilter>
</elmah>
 <httpHandlers>
        <add verb="POST,GET,HEAD" path="errors/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>
    <httpModules>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
        <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
        <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
    </modules>
    <handlers>
      <add name="Elmah" path="elmah/admin/elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
    </handlers>
    <httpErrors>
            <remove statusCode="404" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <error statusCode="500" prefixLanguageFilePath="" path="/errors/error.asp" responseMode="ExecuteURL" />
            <error statusCode="404" prefixLanguageFilePath="" path="/global/404.aspx" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>
<location path="errors/admin/elmah.axd">
    <system.web>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</location>

最佳答案

下面应该工作(我做的是您正在谈论的完全相同的事情)

try {
  // do something
} catch (Exception ex) {
  Elmah.ErrorSignal.FromCurrentContext().Raise(ex); // logs and sends the error through elmah
  // write a message to the user
}

如果您想要一个很好的显示消息的框架,可以查看smokesignals(免责声明:这是我的工作)

关于.net - Elmah-捕获错误,但仍然记录并发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110075/

相关文章:

c# - 事先检查 `System.Activator.CreateInstance(Of T)` 是否会失败

c# - 如何在 .Net 中读取 .ETL 文件?

c# - ASP.NET Active Directory C# 字段规范

asp.net - jQuery UI 与 asp.net 母版页

vb.net - 局部变量 : Pascal or Camel Casing?

vb.net - Task.Run 应如何调用 VB.NET 中的异步方法?

c# - C# 中的主成分分析

c# - 尝试创建新类型时出现 InvalidProgramException

asp.net - ASP.NET/Paypal: Paypal 集成向导?

c# - 无法加载文件或程序集 'EntityFramework' 或其依赖项之一。程序集可能已被篡改