ASP.NET MVC Override HandleError заставляет View не отображать - PullRequest
1 голос
/ 17 ноября 2010

В моем приложении я использую «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

1 Ответ

1 голос
/ 17 ноября 2010

Я только что взглянул на исходный код метода HandleError в Codeplex. Я набрал часть кода оттуда

        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

Это похоже на работу

...