init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
160
KretaWeb/App_Start/MvcCustomExceptionAttribute.cs
Normal file
160
KretaWeb/App_Start/MvcCustomExceptionAttribute.cs
Normal file
|
@ -0,0 +1,160 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
using Kreta.Core.Validation.Exceptions;
|
||||
using Kreta.Enums.ManualEnums;
|
||||
using Kreta.Framework;
|
||||
using Kreta.Web.Helpers.Error;
|
||||
using Kreta.Web.Logging.Extensions;
|
||||
using Kreta.Web.Logging.Logger;
|
||||
|
||||
namespace Kreta.Web
|
||||
{
|
||||
public class MvcCustomExceptionAttribute : FilterAttribute, IExceptionFilter
|
||||
{
|
||||
public void OnException(ExceptionContext filterContext)
|
||||
{
|
||||
Guid? logId = null;
|
||||
if (filterContext.HttpContext.Request.Headers.AllKeys.Contains(KliensTipusEnum.Mobile.ToString()))
|
||||
{
|
||||
if (filterContext.Exception is System.Web.Http.HttpResponseException exception)
|
||||
{
|
||||
filterContext.Result = new HttpStatusCodeResult((int)exception.Response.StatusCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
filterContext.Result = new HttpStatusCodeResult((int)CustomHTTPStatusEnum.KezeletlenHiba);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var statusError = filterContext.Exception as StatusError;
|
||||
var validationError = filterContext.Exception as ValidationException;
|
||||
if (statusError != null)
|
||||
{
|
||||
filterContext.HttpContext.Response.StatusCode = statusError.StatusCode;
|
||||
|
||||
#if !DEBUG
|
||||
if (statusError.UnHandledException != null)
|
||||
{
|
||||
logId = SDAServer.Instance.Logger.ExceptionThrown(statusError.UnHandledException, filterContext.HttpContext.Request.UserHostAddress);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (statusError.Redirect != null)
|
||||
{
|
||||
filterContext.Result = new RedirectToRouteResult(statusError.Redirect);
|
||||
}
|
||||
else
|
||||
{
|
||||
filterContext.Result = new JsonResult
|
||||
{
|
||||
ContentType = "application/json",
|
||||
Data = new ErrorModel
|
||||
{
|
||||
Message = statusError.Message,
|
||||
Json = statusError.Json,
|
||||
Status = statusError.StatusCode,
|
||||
IsMvc = true,
|
||||
ErrorCode = logId
|
||||
},
|
||||
JsonRequestBehavior = JsonRequestBehavior.AllowGet
|
||||
};
|
||||
}
|
||||
}
|
||||
else if (validationError != null)
|
||||
{
|
||||
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
|
||||
|
||||
filterContext.Result = new JsonResult
|
||||
{
|
||||
ContentType = "application/json",
|
||||
Data = new ErrorModel
|
||||
{
|
||||
Message = validationError.Message,
|
||||
Json = string.Empty,
|
||||
Status = (int)HttpStatusCode.BadRequest,
|
||||
IsMvc = true,
|
||||
ErrorCode = logId
|
||||
},
|
||||
JsonRequestBehavior = JsonRequestBehavior.AllowGet
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
#if !DEBUG
|
||||
logId = SDAServer.Instance.Logger.ExceptionThrown(filterContext.Exception, filterContext.HttpContext.Request.UserHostAddress);
|
||||
#endif
|
||||
if (filterContext.HttpContext.Request.IsAjaxRequest() || filterContext.HttpContext.Request.Files.Count > 0)/*a kendo file upload egy iframet postol és ajaxosan kezeli le ami megtréfálja a logikát*/
|
||||
{
|
||||
filterContext.Result = new JsonResult
|
||||
{
|
||||
ContentType = "application/json",
|
||||
Data = new ErrorModel
|
||||
{
|
||||
IsStatusError = false,
|
||||
Message = StringResourcesUtil.GetString(45)/*Hiba történt az oldalon*/,
|
||||
Status = (int)HttpStatusCode.InternalServerError,
|
||||
IsMvc = true,
|
||||
ErrorCode = logId
|
||||
},
|
||||
JsonRequestBehavior = JsonRequestBehavior.AllowGet
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
|
||||
{
|
||||
controller = "HibaOldal",
|
||||
action = "Index",
|
||||
area = string.Empty
|
||||
}));
|
||||
}
|
||||
|
||||
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
|
||||
}
|
||||
}
|
||||
|
||||
filterContext.ExceptionHandled = true;
|
||||
filterContext.HttpContext.Response.Clear();
|
||||
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
|
||||
|
||||
if (!filterContext.Exception.Data.Contains(RequestResponseLoggingFields.Server.ExceptionId))
|
||||
{
|
||||
filterContext.Exception.Data.Add(RequestResponseLoggingFields.Server.ExceptionId, logId);
|
||||
}
|
||||
|
||||
filterContext.HttpContext.ApplicationInstance.Context.AddException(filterContext.Exception);
|
||||
}
|
||||
|
||||
protected virtual ActionResult CreateActionResult(ExceptionContext filterContext)
|
||||
{
|
||||
var ctx = new ControllerContext(filterContext.RequestContext, filterContext.Controller);
|
||||
|
||||
var viewName = SelectFirstView(ctx, "~/Views/ErrorHandler/CustomError.cshtml");
|
||||
|
||||
var controllerName = (string)filterContext.RouteData.Values["controller"];
|
||||
var actionName = (string)filterContext.RouteData.Values["action"];
|
||||
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
|
||||
var result = new PartialViewResult
|
||||
{
|
||||
ViewName = viewName,
|
||||
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
protected string SelectFirstView(ControllerContext ctx, params string[] viewNames)
|
||||
{
|
||||
return viewNames.First(view => ViewExists(ctx, view));
|
||||
}
|
||||
|
||||
protected bool ViewExists(ControllerContext ctx, string name)
|
||||
{
|
||||
var result = ViewEngines.Engines.FindView(ctx, name, null);
|
||||
return result.View != null;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue