1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.Mvc.Properties;
- namespace EMIS.Web.Controls.Filters
- {
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
- public class CustomExceptionAttribute : HandleErrorAttribute, IExceptionFilter
- {
- private Type _exceptionType = typeof(Exception);
- private string _master;
- private readonly object _typeId = new object();
- private string _view;
- private const string DefaultView = "Error";
- public override void OnException(ExceptionContext filterContext)
- {
- if (filterContext == null)
- {
- throw new ArgumentNullException("filterContext");
- }
- if (!filterContext.IsChildAction && (!filterContext.ExceptionHandled && filterContext.HttpContext.IsCustomErrorEnabled))
- {
- Exception innerException = filterContext.Exception;
- if ((new HttpException(null, innerException).GetHttpCode() == 500) && this.ExceptionType.IsInstanceOfType(innerException))
- {
- string controllerName = (string)filterContext.RouteData.Values["controller"];
- string actionName = (string)filterContext.RouteData.Values["action"];
- HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
- ViewResult result = new ViewResult
- {
- ViewName = this.View,
- MasterName = this.Master,
- ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
- TempData = filterContext.Controller.TempData
- };
- filterContext.Result = result;
- filterContext.ExceptionHandled = true;
- filterContext.HttpContext.Response.Clear();
- filterContext.HttpContext.Response.StatusCode = 500;
- filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
- }
- }
- }
- }
- }
|