MVC 异常处理机制
方法一 :web.config配置文件的 system.web 接点下添加,若为On则不会将异常信息反馈到用户,而是友好的跳转到error.htm
<customErrors mode="On" defaultRedirect="error.htm">
<error statusCode="404" redirect="~/error/notfound"></error>
</customErrors>
方法二:在 FilterConfig.cs 中有 new HandleErrorAttribute() 这样一句话, 此类为微软默认已经有的异常处理类,但是是注释的,方法而的优先级比方法一高。
方法三:自定义异常处理类
此处需要注意的是,和方法二差别不大,就是实现IExceptionFilter借口中的OnException方法,可以认为做一些在异常后的后续处理。
调用可以通过
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomExceptionAttribute(), 1);
filters.Add(new HandleErrorAttribute(), 2);//数字越小优先级越高。
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Web
{
public class CustomExceptionAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled == true)
{
HttpException httpExce = filterContext.Exception as HttpException;
if (httpExce.GetHttpCode() != 500)//为什么要特别强调500 因为MVC处理HttpException的时候,如果为500 则会自动将其ExceptionHandled设置为true,那么我们就无法捕获异常
{
return;
}
}
HttpException httpException = filterContext.Exception as HttpException;
if (httpException != null)
{
filterContext.Controller.ViewBag.UrlReferrer = filterContext.HttpContext.Request.UrlReferrer;
if (httpException.GetHttpCode() == 404)
{
filterContext.HttpContext.Response.Redirect("~/home/notfound");
}
else if (httpException.GetHttpCode() == 500)
{
filterContext.HttpContext.Response.Redirect("~/home/internalError");
}
}
//写入日志 记录
filterContext.ExceptionHandled = true;//设置异常已经处理
}
}
}
最新文章
- UWP 颜色选择器(ColorPicker) 和 自定义的Flyout(AdvancedFlyout)
- list点击项高亮其他默认
- 使用Apache2配置多个站点
- ural 1115,搜索
- 你的java 代码对JIT编译友好吗?
- MyBatis学习练习
- 膜拜一个神奇的女人——Hedy Lamarr
- Python 实现整数线性规划:分枝定界法(Branch and Bound)
- jsp4
- ionic2引入cordova插件时提示 no provider for * 错误
- SQL语句(一)SQL和数据库数据表的创建
- Linux使用ntpdate和ntpd进行时间同步
- Error running app: Default Activity not found ; 安卓程序运行不了,也不报错。
- python06 深浅拷贝原理
- Linux应用程序设计之网络基础编程
- hadoop安装入门
- mysql慢查询日志开启和存储格式
- chromium之MessageLoop浅析
- 解决";authentication token manipulation error";
- cookie的优缺点
热门文章
- yum安装时出现:Cannot retrieve metalink for repository: epel. Please verify its path and try again
- 3ds max的动画输出
- MongoDB csv文件导入导出
- 20145206邹京儒《Java程序设计》第4周学习总结
- HTML5学习之WebWork多线程处理(八)
- 关于Python 获取windows信息收集
- Java获取当前时间年月日、时间格式化打印、字符串转日期
- 使用Visual Studio Code开发AngularJS应用
- HDU 5876 Sparse Graph BFS 最短路
- [Windows驱动开发](四)内存管理