Elmah - поймай ошибку, но все равно войди в нее и отправь письмо? - PullRequest
10 голосов
/ 24 февраля 2011

Сначала я обнаружил, что вы можете поймать его и записать в улове, но это не отправляет электронное письмо.Затем я узнал об использовании класса Error Signal.Это сработало, однако, что не было видно из чтения, так это то, что он обрабатывает ошибку как нормальную, поэтому, когда я сообщаю об ошибке, она все равно переходит на страницу пользовательской ошибки, я не хочу, чтобы это произошло.

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

Как мне это сделать?

РЕДАКТИРОВАТЬ: Это то, что у меня есть, и оно перенаправляет меня на страницу пользовательских ошибок.

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

Редактировать: Публикация моих разделов web.config, касающихся Elmah (кроме строки подключения 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>

Ответы [ 2 ]

20 голосов
/ 24 февраля 2011

Нижеследующее должно работать (я делаю то же самое, о чем вы говорите)

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 (отказ от ответственности: это моя работа)

1 голос
/ 24 февраля 2011
Try
'      do something
Catch ex As Exception
    ' logs and sends the error through elmah
    ' write a message to the user
Elmah.ErrorSignal.FromCurrentContext().Raise(ex)
End Try

Также Smokesignals переходит к 404

Вопрос помечен как вопрос vb.net, пожалуйста, имейте некоторое уважение

...