Как мне регистрировать необработанные исключения в ASP.NET MVC?
-
03-07-2019 - |
Вопрос
Вот что я пытаюсь сделать в моем Global.asax.vb:
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
routes.MapRoute( _
"Error", _
"error.html", _
New With {.controller = "Error", _
.action = "FriendlyError"} _
)
...
'other routes go here'
...
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
...
'code here logs the unhandled exception and sends an email alert'
...
Server.Transfer("http://www.example.com/error.html")
End Sub
End Class
Но этот сервер.Передача завершается с ошибкой:
Invalid path for child request 'http://www.example.com/error.html'. A virtual path is expected.
Как мне это исправить?Или, какой для меня лучший способ сделать это?
Другие советы
ЭЛЬМА является отличным обработчиком ошибок для перехвата необработанных исключений.Он легко подключается к вашему веб-приложению через HttpModules и имеет различные опции для уведомления и ведения журнала.
Характеристики:
- Ведение журнала SQL, XML, SQLite, InMemory
- Уведомление по электронной почте
- RSS-канал
- Подробно!протоколирование исключений
- Простая интеграция
- Сигнализация ошибок - сигнализирует обработчику ошибок об ошибке, одновременно "красиво умирая" для пользователя.
И, к вашему сведению, SO использует ELMAH, хотя и раздвоенную версию.Это самое лучшее архитектурное объяснение и руководство по настройке
Вы должны указать виртуальный путь, то есть путь относительно базы приложения (то есть никаких путей, внешних по отношению к приложению), поэтому что-то вроде: Server.Transfer (& Quot; error.html & Quot;) или же Server.Transfer (& Quot; /error.html") или же Server.Transfer (& Quot; ~ / error.html & Quot;) р>
По умолчанию приложения ASP.NET MVC имеют представление Shared / Error.aspx, наследуемое от
System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>
Если ваш контроллер использует атрибут [HandleError], все исключения будут пузыриться до тех пор, пока не будут перехвачены, и окажутся на этой странице.
Я просто добавил встроенный Page_Load (допустимо в этом случае, так как это конец строки):
<script runat="server">
Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
MyExceptionHandlerService.LogException("exceptionsource", this.Model.Exception)
End Sub
</script>
После этого дружелюбный "Извини ..." сообщение. Похоже, что ELMAH более надежен, но для моих нужд этого было достаточно.