Сначала я обнаружил, что вы можете поймать его и зарегистрировать его внутри catch, но это не отправляет электронное письмо.
Затем я узнал об использовании класса Error Signal
. Это сработало, однако то, что не было видно из чтения, заключается в том, что он обрабатывает ошибку, как обычно, поэтому, когда я сигнализирую об ошибке, она все равно переходит на страницу пользовательской ошибки, я не хочу, чтобы это произошло.
Что я хочу сделать, это поймать эту ошибку, зарегистрировать ее, отправить электронное письмо, но оставайтесь на странице с ошибкой, поэтому я могу предоставить специальную обратную связь. Я не хочу, чтобы он перешел на страницу пользовательских ошибок.
Как я могу это сделать?
EDIT: Это то, что у меня есть, и оно перенаправляет меня на страницу пользовательских ошибок.
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>