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

时间: 2024-10-13 12:40:29

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

Servlet过滤器——异常捕获过滤器

1.概述 介绍如何实现异常捕获过滤器. 2.技术要点 本实例主要是在过滤器Filter的doFilter()方法中,对执行过滤器链的chain的doFilter()语句处添加try…catch异常捕获语句,然后在chach语句中,循环异常对象,直到找出根异常为止. 3.具体实现 (1)创建Filter实现类ExceptionFilter.java,利用throwable抛出异常,去捕捉异常原因并转到相应的页面中主要代码为: public class ExceptionFilter impleme

全局的异常捕获Struts2

自定义一个拦截器实现全局异常捕获~ struts配置文件. <interceptors> <interceptor name="myException"  class="org.sixtb.portal.base.interceptor.InterceptorHandler"/> <!-- 定义一个拦截器栈 --> <interceptor-stack name="myExceptionInterceptor&qu

关于全局错误,异常捕获

class Capture { private static $callback; public static function register($callback) { self::$callback = $callback; set_error_handler([__CLASS__, 'errorHandle'], E_ALL ^ E_DEPRECATED ^ E_STRICT ^ E_NOTICE ^ E_WARNING); set_exception_handler([__CLASS_

判断请求是浏览器页面请求还是ajax进入

其实我们在某种场景下需要判断用户是从浏览器地址栏敲击url发起的请求 ,还是我们通过ajax发起的请求呢?我们可以通过 Request.IsAjaxRequest方法判断是否是ajax过来的请求, 那么他的原理是什么呢?其实他就是判断了浏览器提交的协议头 如果是 ajax发起的请求他会多一个协议头 X-Requested-With:XMLHttpRequest ,如果是浏览器进入该页面就不会存在着这个协议头  以上结论只对主流浏览器,扩展根据这个特性可以做权限管理 原文地址:https://ww

SpringBoot配置全局异常捕获

1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.java捕获到异常以ajax形式返回 MyExceptionHandler.java捕获到异常以页面形式返回 ajaxerror.html这个是测试返回ajax异常的页面 error.html以页面形式返回的异常到这个页面 1.1 页面跳转形式 1.1.1 配置 MyExceptionHandler.

WebAPI 过滤器拦截处理以及异常捕获

对action进行拦截处理 public class UserAuthorizeAttribute : ActionFilterAttribute { /// <summary> /// CC调用的Token /// </summary> //private static readonly string CCToken = ConfigurationManager.AppSettings["CCToken"].ToString(); /// <summar

Shiro权限控制-区分Ajax请求

一.为什么要区分Ajax请求? 在前台使用EasyUI的系统中,所有的请求可以分为两大类: 1)跳转到页面 2)返回Json数据 这时当请求来了时要区分处理,如果是"跳转到页面"的请求,需要跳到没有权限的页面,否则"返回Json数据"的请求,需要返回一个Json数据{"success":false,"message":"权限不足!"} 二.实现原理分析 2.1 原有实现分析 原来权限执行分析: 1)当用户访

Configure、中间件与ErrorHandlingMiddleware全局异常捕获

一.Configure Startup.cs中的Configure方法主要是http处理管道配置.中间件和一些系统配置,其中 IApplicationBuilder: 定义一个类,该类提供配置应用程序请求的机制管道.通过IApplicationBuilder下的run.use方法传入管道处理方法.这是最常用方法,对于一个真实环境的应用基本上都需要比如权限验证.跨域.异常处理等. IHostingEnvironment:提供有关正在运行的应用程序的web托管环境的信息 简单来说Configure方

Spring-MVC开发之全局异常捕获全面解读(转)

异常,异常.我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个!产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息!在用Spring MVC开发WEB应用时捕获全局异常的方法基本有两种: WEB.XML,就是指定error-code和page到指定地址,这也是最传统和常见的做法 用Spring的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等. SO,本文列出Spring-MVC做WEB开发时常用全局异常捕获的几种解决方案抛砖引玉,互相没