在Global.asax和Error.aspx中记录ASP.NET MVC错误

时间:2009-05-06 22:13:02

标签: .net asp.net-mvc model-view-controller error-handling global-asax

我正在创建一个ASP.NET MVC应用程序。我需要在两个地方处理异常。

Global.asax.vb文件:

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

Views \ Shared \ Error.aspx文件:

<%@ 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-ish在哪里?

3 个答案:

答案 0 :(得分:6)

您可能想尝试一个名为ELMAH的模块。 Scott Hanselman说“ELMAH是你的ASP.NET错误的Tivo”。我目前正在使用它来记录我的ASP .NET + MVC应用程序中的错误,它就像一个魅力。安装很简单,因为所需要的只是在web.config中添加行。您甚至可以限制谁有权查看错误日志。

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

答案 1 :(得分:2)

最MVC的方法是使用ActionFilters来处理(记录)异常。

请查看此示例:

Logging with ASP.NET MVC Action Filters

答案 2 :(得分:1)

实际上,对于我能收集的内容,你只是错过了一个指令:

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

它可以像宣传的一样工作。