异常过滤器

iamlcw / 2023-08-19 / 原文

一.什么是异常过滤器

异常过滤器是 .NET Core 中一种用于处理全局异常的机制。 它可以在代码发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑,把异常报错自定义。 异常过滤器在整个程序的范围内生效,可以用于处理各种异常情况。

二.异常过滤器的使用

定义异常过滤器要继承接口IExceptionFilter或者IAsyncExceptionFilter,IAsyncExceptionFilter支持异步,包含一个OnExceptionAsync方法,处理发生的异常

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace Day0818.WebAPI
{
    public class MyExceptionFilter : IAsyncExceptionFilter
    {
        
        private readonly ILogger<MyExceptionFilter> logger;

        public MyExceptionFilter(ILogger<MyExceptionFilter> logger)
        {
            this.logger = logger;
        }

        public Task OnExceptionAsync(ExceptionContext context)
        {
            if (!context.ExceptionHandled)
            {
                context.Result = new ContentResult()
                {
                    Content = "服务器异常请稍后再试...."
                };
                logger.LogError("全局异常记录到Nlog日志==>" + context.Exception.Message);
            }
            context.ExceptionHandled = true;
            return Task.CompletedTask;
        }
    }
}

添加全局异常过滤器

//全局异常过滤器
builder.Services.AddControllers(x =>
{
    x.Filters.Add<MyExceptionFilter>();
});

然后写一个测试接口

/// <summary>
        /// 异常测试
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult TryExceptionFilter(int i=0)
        {
            return Ok(1 / i);
        }

然后报错后就可以把错误自定义并且记录到Nlog日志中