.Net Core MVC 添加全局异常监控并记录

新建一个类文件:

/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描    述:全局异常监控和记录                                                    
*│ 作    者:Dennyhui                                             
*│ 版    本:1.0                                                 
*│ 创建时间:2020年5月22日18:42:35               
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间:Fisk.MDM.Business            
*│ 类       名:GlobalExceptionFilter                                      
*└──────────────────────────────────────────────────────────────┘
*/
using Fisk.MDM.DataAccess.Models;
using Fisk.MDM.Utility.Common;
using Fisk.MDM.ViewModel;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json;
using System;
using System.Threading.Tasks;

namespace Fisk.MDMSolustion.Models
{
    public class GlobalExceptionFilter : IExceptionFilter
    {
        MDMDBContext dbc = new MDMDBContext();
        /// <summary>
        /// 发生异常时进入
        /// </summary>
        /// <param name="context"></param>
        public void OnException(ExceptionContext context)
        {
            if (context.ExceptionHandled == false)
            {
                Result result = new Result();
                result.success = false;
                result.message = "发生错误," + context.Exception.Message;
                result.data = "";
                context.Result = new ContentResult
                {
                    //Content = context.Exception.Message,//这里是把异常抛出。也可以不抛出。
                    Content = JsonConvert.SerializeObject(result),
                    StatusCode = StatusCodes.Status200OK,
                    ContentType = "text/html;charset=utf-8"
            };
                system_globalexception_log sgel = new system_globalexception_log();
                sgel.ID = Guid.NewGuid().ToString();
                sgel.Creater = CurrentUser.UserAccount;
                sgel.CreateTime = DateTime.Now;
                sgel.Controller = context.RouteData.Values["controller"].ToString();
                sgel.Action = context.RouteData.Values["action"].ToString();
                sgel.ErrorMsg = context.Exception.Message;
                dbc.system_globalexception_log.Add(sgel);
                dbc.SaveChangesAsync();
            }
            context.ExceptionHandled = true;
        }

        /// <summary>
                /// 异步发生异常时进入
                /// </summary>
                /// <param name="context"></param>
                /// <returns></returns>
        public Task OnExceptionAsync(ExceptionContext context)
        {
            OnException(context);
            return Task.CompletedTask;
        }
    }
}

然后在startup.cs文件里面的ConfigureServices下面注册一下:

 //注入全局异常处理  2020年5月22日18:10:09  Dennyhui
            services.AddMvc(
                options =>
                {
                    options.Filters.Add<GlobalExceptionFilter>();
                }
                )


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值