Mode属性的默认值是RemoteOnly在开发期间,HandleErrorAttribute将不会拦截异常,但当应用程序部署到产品服务器时,并从另一台计算机发出请求时HandleErrorAttribute变生效
[HandleError(ExceptionType =typeof(ArgumentNullException),View ="Null")] public ActionResult Index(){ return View(); }
在渲染视图时HandleErrorAttribute过滤器会传递一个HandleErrorInfo视图模型对象这是一个封装了异常细节的封装程序
名称 类型 描述 ActionName String 返回生成异常的Action名称 ControllerName String 返回生成异常的Controller名称 Exception Exception 返回此异常
@model HandleErrorInfo @{ ViewBag.Title = "Sorry"; } <!DOCTYPE html> <html> <head> <meta content="width=device-width" /> </head> <body> @Model.Exception.StackTrace </body> </html>
备注:使用HandleError过滤器时一定要包含Model.Exception.StackTrace否则视图不会显示给用户,引用没必要给用户展示堆栈信息所以可以将该值放入div并隐藏
动作过滤器
用于任何目的的多用途过滤器
namespace System.Web.Mvc{ // 摘要:定义操作筛选器中使用的方法。 public interface IActionFilter{ // 摘要:在执行操作方法后调用。 // 参数:filterContext: // 筛选器上下文。 void OnActionExecuted(ActionExecutedContext filterContext); // 摘要:在执行操作方法之前调用。 // 参数:filterContext: // 筛选器上下文。 void OnActionExecuting(ActionExecutingContext filterContext); } }
ActionExecutingContext 属性
名称 类型 描述 ActionDescriptor ActionDescriptor 动作方法的描述 Result ActionResult 动作方法的结果,设置属性非空值,过滤器可以取消请求
ActionExecutedContext 属性
名称 类型 描述 ActionDescriptor ActionDescriptor 动作方法的描述 Canceled Bool 如果该动作被另一个过滤器取消,则返回true Exception Exception 返回由另一个过滤器或动作方法抛出的异常 ExceptionHandled Bool 如果异常被处理返回true Result ActionResult
结果过滤器:
它会对动作方法所产生的结果进行操作