Imports System.Collections.Generic Imports System.Web Imports System.Web.Mvc Public Class HandleCustomErrorAttribute Inherits HandleErrorAttribute Public Overrides Sub OnException(filterContext As System.Web.Mvc.ExceptionContext) If filterContext.ExceptionHandled OrElse Not filterContext.HttpContext.IsCustomErrorEnabled Then Return If New HttpException(Nothing, filterContext.Exception).GetHttpCode() <> 500 Then Return If Not ExceptionType.IsInstanceOfType(filterContext.Exception) Then Return Dim log As New ErrorLog With { .AbsoluteUri = filterContext.HttpContext.Request.Url.AbsoluteUri, .Controller = filterContext.RouteData.Values("controller").ToString(), .Action = filterContext.RouteData.Values("action").ToString(), .RequestType = filterContext.HttpContext.Request.RequestType, .Message = filterContext.Exception.Message, .AjaxCall = (filterContext.HttpContext.Request.Headers("X-Requested-With") IsNot Nothing AndAlso filterContext.HttpContext.Request.Headers("X-Requested-With") = "XMLHttpRequest") } Dim userAgent As String = filterContext.HttpContext.Request.UserAgent For Each kv As KeyValuePair(Of String, Object) In filterContext.RouteData.Values log.Parameter.Add(String.Concat(kv.Key, ": ", kv.Value)) Next If filterContext.HttpContext.Request.UrlReferrer IsNot Nothing Then log.ReferrerUrl = filterContext.HttpContext.Request.UrlReferrer.AbsolutePath End If If log.AjaxCall Then 'JSON, wenn [HandleCustomErrorAttribute] nicht gesetzt ist filterContext.Result = New JsonResult() With { .Data = New With { .success = False, .error = filterContext.Exception.Message }, .JsonRequestBehavior = JsonRequestBehavior.AllowGet } Else 'STANDARD Dim cei As New CustomErrorInfo(log.Message, log.ReferrerUrl, CustomErrorInfo.OriginEnum.Exception, -1, filterContext.Exception, log.Controller, _ log.Action) filterContext.Result = New ViewResult() With { .ViewName = Me.View, _ .MasterName = Master, _ .ViewData = New ViewDataDictionary(Of HandleErrorInfo)(cei), .TempData = filterContext.Controller.TempData _ } End If If TypeOf filterContext.Exception Is CustomException = False Then ErrorLogs.NewLog(log, userAgent) End If filterContext.ExceptionHandled = True filterContext.HttpContext.Response.Clear() filterContext.HttpContext.Response.StatusCode = 500 filterContext.HttpContext.Response.TrySkipIisCustomErrors = True End Sub 'Public Overrides Sub OnException(filterContext As System.Web.Mvc.ExceptionContext) ' If filterContext.ExceptionHandled OrElse Not filterContext.HttpContext.IsCustomErrorEnabled Then Return ' If New HttpException(Nothing, filterContext.Exception).GetHttpCode() <> 500 Then Return ' If Not ExceptionType.IsInstanceOfType(filterContext.Exception) Then Return ' Dim controllerName As String = filterContext.RouteData.Values("controller").ToString() ' Dim actionName As String = filterContext.RouteData.Values("action").ToString() ' Dim requestType As String = filterContext.HttpContext.Request.RequestType ' Dim absoluteUri As String = filterContext.HttpContext.Request.Url.AbsoluteUri ' Dim userAgent As String = filterContext.HttpContext.Request.UserAgent ' Dim ajaxCall As Boolean = (filterContext.HttpContext.Request.Headers("X-Requested-With") IsNot Nothing AndAlso ' filterContext.HttpContext.Request.Headers("X-Requested-With") = "XMLHttpRequest") ' Dim stbValues As New StringBuilder() ' stbValues.Append("requestType").Append(": ").Append(String.Concat(requestType, If((ajaxCall = True), " (AJAX)", ""))).Append(vbLf) ' stbValues.Append("userAgent").Append(": ").Append(userAgent).Append(vbLf) ' For Each kv As KeyValuePair(Of String, Object) In filterContext.RouteData.Values ' stbValues.Append(kv.Key).Append(": ").Append(kv.Value.ToString()).Append(vbLf) ' Next ' Dim referrerUrl As String = "" ' If filterContext.HttpContext.Request.UrlReferrer IsNot Nothing Then ' referrerUrl = filterContext.HttpContext.Request.UrlReferrer.AbsolutePath ' End If ' If ajaxCall Then ' 'JSON, wenn [HandleErrorAsJsonAttribute] nicht gesetzt ist ' filterContext.Result = New JsonResult() With { ' .Data = New With { ' .success = False, ' .error = filterContext.Exception.Message ' }, ' .JsonRequestBehavior = JsonRequestBehavior.AllowGet ' } ' Else ' 'STANDARD ' Dim cei As New CustomErrorInfo(filterContext.Exception.Message, ' referrerUrl, ' CustomErrorInfo.OriginEnum.Exception, ' -1, ' filterContext.Exception, controllerName, ' actionName) ' filterContext.Result = New ViewResult() With { ' .ViewName = Me.View, _ ' .MasterName = Master, _ ' .ViewData = New ViewDataDictionary(Of HandleErrorInfo)(cei), ' .TempData = filterContext.Controller.TempData _ ' } ' End If ' 'TODO: Logging ' If TypeOf filterContext.Exception Is CustomException = False Then ' PushoverManager.Send( ' New PushoverMessage(String.Concat("Exception auf ", absoluteUri), ' String.Concat(stbValues, filterContext.Exception.Message), ' referrerUrl, referrerUrl, True)) ' End If ' filterContext.ExceptionHandled = True ' filterContext.HttpContext.Response.Clear() ' filterContext.HttpContext.Response.StatusCode = 500 ' filterContext.HttpContext.Response.TrySkipIisCustomErrors = True 'End Sub End Class