NetCore实现全局异常捕捉统一处理
做net项目时候,在Global.asax文件中可以通过Application_Error方法全局捕获异常并处理后统一跳转到自定义的错误页面。
下面是我个人在NetCore项目中实现全局捕获异常并统一处理的功能的记录,以便备份。
1、在项目根目录新建文件夹Filter,并在文件夹下新建类,命名为GlobalExceptionFilter.cs
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using CMSCore.Web.Core; namespace CMSCore.Web.Filter
{
public class GlobalExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
Exception ex = context.Exception;
Log4Net.Error("系统出错", ex);//记录错误日志
context.ExceptionHandled = true; //代表异常已经处理,不会再跳转到开发调试时的异常信息页,可以跳转到我们下面自定义的方法中。若开发过程可以将
该行注释掉,则直接抛出异常调试 //通过HTTP请求头来判断是否为Ajax请求,Ajax请求的request headers里都会有一个key为x-requested-with,值“XMLHttpRequest”
var requestData= context.HttpContext.Request.Headers.ContainsKey("x-requested-with");
bool IsAjax = false;
if (requestData)
{
IsAjax = context.HttpContext.Request.Headers["x-requested-with"] == "XMLHttpRequest" ? true :false;
}
if(!IsAjax)//不是异步请求则跳转页面,异步请求则返回json
{
context.RouteData = new Microsoft.AspNetCore.Routing.RouteData();
context.RouteData.Values.Add("controller", "home");
context.RouteData.Values.Add("action", "error");
context.Result = RedirectHelper.UrlFail(context.RouteData);
}
else
context.Result = RedirectHelper.JsonError(); }
}
}
2、RedirectHelper.cs的代码
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing; namespace CMSCore.Web.Core
{ public class RedirectHelper
{ public static AjaxModel AjaxModel(int code,string msg,dynamic data=null,string url=null)
{
return new AjaxModel()
{
Code=code,
Msg=msg,
Data=data,
Url=url
};
}
public static ActionResult JsonError()
{
JsonResult json = new JsonResult(AjaxModel(, "系统出错啦"));
return json;
} public static ActionResult UrlFail(RouteData route)
{
RedirectToActionResult result = new RedirectToActionResult(route.Values["action"].ToString(), route.Values["controller"].ToString(), null);
return result;
} } /// <summary>
/// Json返回结构
/// </summary>
public class AjaxModel
{
public int Code { get; set; }
public string Msg { get; set; }
public object Data { get; set; }
public string Url { get; set; }
} }
3、在Startup.cs中,ConfigureServices方法添加该GlobalExceptionFilter为异常处理机制。
//记得引用对应命名空间
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
//添加数据库操作上下文
services.AddDbContext<BcmfDBContext>(option => option.UseSqlServer(Configuration.GetConnectionString("DefaultConnectionString")));
//添加全局异常处理机制
services.AddMvc(option=>{
option.Filters.Add<GlobalExceptionFilter>();
});
}
NetCore实现全局异常捕捉统一处理的更多相关文章
- 在Spring Boot中添加全局异常捕捉提示
在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 全局异常捕捉: 新建一个类GlobalDefaultExceptionHandler, 在class注解上@Controll ...
- android中全局异常捕捉
android中全局异常捕捉 只要写代码就会有bug,但是我们要想办法收集到客户的bug.有第三方bugly或者友盟等可以收集.但是,android原生就提供了有关收集异常的api,所以我们来学习一下 ...
- Spring 全局异常捕捉
Spring全局异常捕捉类 注解@ControllerAdvice package com.sicdt.sicsign.web.bill.controller; import org.springfr ...
- springboot(四)拦截器和全局异常捕捉
github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 全部 ...
- 5.全局异常捕捉【从零开始学Spring Boot】
在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...
- 【netcore基础】MVC API全局异常捕捉中间件ExceptionHandlerMiddleWare
项目中想通过统一的接口格式返回异常信息,而不是404 500等HTTP协议层的异常响应 例如 { , , "message":"用户名或密码不正确", &quo ...
- (5)全局异常捕捉【从零开始学Spring Boot】
在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...
- Android全局异常捕捉
// 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import jav ...
- Spring boot之全局异常捕捉
在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...
随机推荐
- 【转载】Hadoop分布式文件系统HDFS的工作原理详述
转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文 ...
- 记一个java.lang.NoClassDefFoundError的问题
如题,即找不到对应class,出现这个问题,很可能是文件路径配置错误,也可能是jar包丢失. 比如我今天遇到的问题,就是IDEA没有把mybatis的jar包复制到编译目录造成的.
- Python学习日记之中文支持
解决中文输出错误 在开头添加 # -*- coding: utf-8 -*- 即可
- 三维重建PCL:点云单侧面正射投影
终于把点云单侧面投影正射投影的代码写完了,为一个阶段,主要使用平面插值方法,且只以XOY平面作为的正射投影面.有些凑合的地方,待改进. 方法思路:使用Mesh模型,对每一个表面进行表面重建.借助Ope ...
- PHP几个常用的概率算法
算法一 /** * 全概率计算 * * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4) * @return string 返回上面 ...
- 01Struts 2
Struts 2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交 ...
- 02JavaScript基础语法及数据类型
JavaScript基础语法及数据类型 2.1数据类型 2.1.1字符串(String) 用单引号或双引号括起来的零个或多个单一的字符所组成. 2.1.2数值(Number) 包含整数或浮点数. 2. ...
- Oracle RAC 后台进程
LMS - Gobal 全局缓存服务进程 LMD - Global Enqueue Service Daemon 全局查询服务守护进程 LMON - 全局服务器监控进程 LCK0 ...
- 第三节:执行一些EF的增删改查
针对两表操作 一丶增加 #region 05-增加操作 /// <summary> /// 05-增加操作 /// </summary> /// <param name= ...
- 解决移动端 footer fixd 定位被键盘顶起来的方案
直接上代码: $(document).ready(function () { var u = navigator.userAgent; var isAndroid = u.indexOf('Andro ...