Website openantrag.de
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OpenAntrag/OpenAntragLib/Attributes/HandleCustomErrorAttribute.vb

148 lines
6.3 KiB

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