在我的应用中,我正在使用“HandleError”,如果发生错误,我的“Error.vbhtml”视图会呈现。这工作得很好,除了现在我还要记录错误。我已经构建了一个自定义的HandleError类,继承了HandleErrorAttribute,并重写了OnException方法。
现在我的错误被记录了,但是Error.vbhtml视图没有被呈现出来......我在祈祷什么呢?
Imports System.Web.Mvc
Namespace Mvc.Attributes
Public Class HandleError : Inherits System.Web.Mvc.HandleErrorAttribute
Private ExceptionService As Domain.IExceptionService
Public Sub New()
ExceptionService = New Domain.ExceptionService(New Domain.ExceptionRepository)
End Sub
Public Overrides Sub OnException(ByVal exceptionContext As ExceptionContext)
''# Log the exception if it has not been handled elsewhere
If Not exceptionContext.ExceptionHandled Then
ExceptionService.AddException(exceptionContext.Exception)
ExceptionService.SubmitChanges()
''# Signal to the system that we've handled the exception
exceptionContext.ExceptionHandled = True
End If
End Sub
End Class
End Namespace
答案 0 :(得分:1)
我刚刚看了一下Codeplex上HandleError方法的源代码。我从那里舀了一些代码
Dim controllerName As String = DirectCast(filterContext.RouteData.Values("controller"), String)
Dim actionName As String = DirectCast(filterContext.RouteData.Values("action"), String)
Dim model As New HandleErrorInfo(filterContext.Exception, controllerName, actionName)
filterContext.Result = New ViewResult() With { _
.ViewName = View, _
.MasterName = Master, _
.ViewData = New ViewDataDictionary(Of HandleErrorInfo)(model), _
.TempData = filterContext.Controller.TempData _
}
filterContext.ExceptionHandled = True
filterContext.HttpContext.Response.Clear()
filterContext.HttpContext.Response.StatusCode = 500
''# Certain versions of IIS will sometimes use their own error page when
''# they detect a server error. Setting this property indicates that we
''# want it to try to render ASP.NET MVC's error page instead.
filterContext.HttpContext.Response.TrySkipIisCustomErrors = True
这似乎有效