Override filter:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ErrorFilter());
filters.Add(new HandleErrorAttribute());
filters.Add(new SessionFilter());
}
}
public class ErrorFilter : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
{
System.Exception exception = filterContext.Exception;
string controller = filterContext.RouteData.Values["controller"].ToString();;
string action = filterContext.RouteData.Values["action"].ToString();
if (filterContext.ExceptionHandled)
{
return;
}
else
{
string actionName = filterContext.RouteData.Values["action"].ToString();
Type controllerType = filterContext.Controller.GetType();
var method = controllerType.GetMethod(actionName);
var returnType = method.ReturnType;
if (returnType.Equals(typeof(JsonResult)))
{
filterContext.Result = new JsonResult()
{
Data = "DATA not returned"
};
}
if (returnType.Equals(typeof(ActionResult))
|| (returnType).IsSubclassOf(typeof(ActionResult)))
{
filterContext.Result = new ViewResult
{
ViewName = "Error"
};
}
}
filterContext.ExceptionHandled = true;
}
}
Declare the model at the top of the error view:
@model System.Web.Mvc.HandleErrorInfo
Then use on the page:
@if (Model != null)
{
<div>
@Model.Exception.Message
<br />
@Model.ControllerName
</div>
}
, .