Ведение журнала ошибок ASP.NET MVC как в Global.asax, так и в Error.aspx - PullRequest
3 голосов
/ 07 мая 2009

Я создаю приложение ASP.NET MVC. Мне нужно обрабатывать исключения в двух местах.

Global.asax.vb file:

Public Class MvcApplication
    Inherits System.Web.HttpApplication
    ...
    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        LogException(HttpContext.Current.Server.GetLastError(), Request)
    End Sub
    Shared Sub LogException(ByVal ex As Exception, ByRef r As System.Web.HttpRequest)
        ...
    End Sub
End Class

Просмотры \ Shared \ Error.aspx file:

<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage(Of System.Web.Mvc.HandleErrorInfo)" %>
<script runat="server">
    Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
        MvcApplication.LogException(Model.Exception, Request)
    End Sub
</script>
...

Но я получаю эту ошибку:

C: \ inetpub \ example.com \ Views \ Shared \ Error.aspx (5): ошибка BC30451: имя «MvcApplication» не объявлено.

Где я должен определить свою функцию LogException (), чтобы она была доступна как из файла Global.asax.vb, так и из файла Error.aspx? Где самый MVC-иш?

Ответы [ 3 ]

6 голосов
/ 11 января 2010

Вы можете попробовать модуль под названием ELMAH. Скотт Хансельман говорит: «ELMAH - это Tivo для ваших ошибок ASP.NET». Я в настоящее время использую это для регистрации ошибок в моих приложениях ASP .NET + MVC, и это работает как очарование. Установка была простой, потому что все, что требуется, это добавить строки в файл web.config. Вы даже можете ограничить доступ к просмотру журналов ошибок.

http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

2 голосов
/ 07 мая 2009

Самый лучший способ MVC - использовать ActionFilters для обработки (регистрации) исключений.

Проверьте это, например:

Ведение журнала с помощью фильтров действий ASP.NET MVC

1 голос
/ 31 января 2011

На самом деле, из того, что я мог собрать, вы пропускаете только директиву:

<%@ Import Namespace="[Your default namespace]" %>

И это будет работать так, как рекламируется.

...