全局的异常捕获过滤器 区分ajax请求 与浏览器导航请求
2015-03-19 00:00
232 查看
全局的异常捕获过滤器 区分ajax请求 与浏览器导航请求
建一个类ExceptionAttribute 继承 HandleErrorAttribute
重写OnException 方法
里面代码:
//1.0日志记录(文本日志和数据库日志)
//拿到日志
Exception exe= filterContext.Exception;
//获取当前exe的最详细信息
Exception inexe = exe.InnerException==null ? exe:exe.InnerException;
while (inexe.InnerException!=null)
{
inexe = inexe.InnerException;
}
//文本日志的缺点:不方便查询和统计
//数据库日志缺点:一个表的数据量将来会很大,频繁访问数据库(队列)
//Log4Net.dll组件
//
//3.0 将详细异常写入到系统日志中 :大家注意:真正的项目中使用的是日志组件,开源的有Log4Net
//日志的记录常用的有:1、记住到文本文件中(没有统计意义的,但是量又大的) 2、记录到数据库中(出异常报表一定记录到db中)
System.IO.File.AppendAllText(filterContext.HttpContext.Server.MapPath("/Logs/Log.txt"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "=" + inexe.ToString() + "\r\n");
//其实就是告诉MVC来处理 就会按照web。config 里面跳转views/shared/error.cshtml 所以不能给异步对象 异步对象只能json格式
//2.0判断当前请求是被ajax请求的还是被浏览器导航请求的
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
//返回json格式
JsonResult jsonre = new JsonResult();
jsonre.Data = new { status = 1, msg = inexe.Message };
jsonre.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
filterContext.Result = jsonre;
//告诉mvc我已经处理了异常信息 你不需要处理了
filterContext.ExceptionHandled = true;
}
else
{
//告诉mvc导航到错误页面
filterContext.ExceptionHandled = false;
}
base.OnException(filterContext);
---------
MVC自己处理的 base.OnException(filterContext); 就是这个作用
filterContext 是传给 错误页面的 Model @model HandleErrorInfo
Web.config 里面设置 开发过程 想看详细异常信息 就
<customErrors mode="RemoteOnly" 就是出 黄页 内容
<system.web>
<customErrors mode="On" defaultRedirect="Error"></customErrors>
On 不管远程和本地访问 都显示友好页面
Of 不管远程和本地访问 都显示黄页
RemoteOnly 远程访问 显示友好页面 本地显示黄页
在App_Start 里的FilterConfig 里面注册
filters.Add(new ExceptionAttribute());//注册全局过滤器
-----
重点是 看日志 因为 发布后不可能开VS 看异常信息
建一个类ExceptionAttribute 继承 HandleErrorAttribute
重写OnException 方法
里面代码:
//1.0日志记录(文本日志和数据库日志)
//拿到日志
Exception exe= filterContext.Exception;
//获取当前exe的最详细信息
Exception inexe = exe.InnerException==null ? exe:exe.InnerException;
while (inexe.InnerException!=null)
{
inexe = inexe.InnerException;
}
//文本日志的缺点:不方便查询和统计
//数据库日志缺点:一个表的数据量将来会很大,频繁访问数据库(队列)
//Log4Net.dll组件
//
//3.0 将详细异常写入到系统日志中 :大家注意:真正的项目中使用的是日志组件,开源的有Log4Net
//日志的记录常用的有:1、记住到文本文件中(没有统计意义的,但是量又大的) 2、记录到数据库中(出异常报表一定记录到db中)
System.IO.File.AppendAllText(filterContext.HttpContext.Server.MapPath("/Logs/Log.txt"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "=" + inexe.ToString() + "\r\n");
//其实就是告诉MVC来处理 就会按照web。config 里面跳转views/shared/error.cshtml 所以不能给异步对象 异步对象只能json格式
//2.0判断当前请求是被ajax请求的还是被浏览器导航请求的
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
//返回json格式
JsonResult jsonre = new JsonResult();
jsonre.Data = new { status = 1, msg = inexe.Message };
jsonre.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
filterContext.Result = jsonre;
//告诉mvc我已经处理了异常信息 你不需要处理了
filterContext.ExceptionHandled = true;
}
else
{
//告诉mvc导航到错误页面
filterContext.ExceptionHandled = false;
}
base.OnException(filterContext);
---------
MVC自己处理的 base.OnException(filterContext); 就是这个作用
filterContext 是传给 错误页面的 Model @model HandleErrorInfo
Web.config 里面设置 开发过程 想看详细异常信息 就
<customErrors mode="RemoteOnly" 就是出 黄页 内容
<system.web>
<customErrors mode="On" defaultRedirect="Error"></customErrors>
On 不管远程和本地访问 都显示友好页面
Of 不管远程和本地访问 都显示黄页
RemoteOnly 远程访问 显示友好页面 本地显示黄页
在App_Start 里的FilterConfig 里面注册
filters.Add(new ExceptionAttribute());//注册全局过滤器
-----
重点是 看日志 因为 发布后不可能开VS 看异常信息
相关文章推荐
- SpringMVC对异常进行全局处理,并区分对待ajax和普通请求
- springMVC全局异常以及拦截器,过滤器不能拿到请求的方法
- atitit.js浏览器环境下的全局异常捕获
- spring MVC总结(核心流程图、如何访问到静态的文件、Spring中的拦截器、全局异常、JUnit单元测试、ajax请求)
- atitit.js浏览器环境下的全局异常捕获
- asp.net mvc ,asp.net mvc api 中使用全局过滤器进行异常捕获记录
- web如何全局捕获ajax异常并且显示到客户端页面
- 前端通信:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布
- 捕获全局异常并输出到SD卡上
- android捕获全局异常,并对异常做出处理
- javascript的ajax请求正确写法(兼容多浏览器)
- location的hash部分和使用window.onhashchange实现ajax请求内容时使用浏览器后退和前进功能
- Android 程序错误处理全局处理-捕获全局异常
- IE中ajax+jsp登录界面,由于缓存导致jsp过滤器与ajax请求被拦截的问题和解决
- Android自定义捕获Application全局异常
- Android捕获全局异常信息并实现上传
- JQuery $.ajax 如何捕获异常信息?
- android捕获全局异常,并对异常做出处理
- [转]Android自定义捕获Application全局异常
- jquery之利用ajax与服务器交谈(完全控制ajax请求之全局函数)