全局的异常捕获过滤器 区分ajax请求 与浏览器导航请求

全局的异常捕获过滤器 区分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 看异常信息

转载于:https://www.cnblogs.com/dianshen520/p/4349156.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值