.NET 异常过滤器

99 阅读1分钟

依赖配置参考

.NET 封装返回结果 - 掘金 (juejin.cn)

创建过滤器

image.png

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json;
using System.Net;

namespace ResultFilter
{
    public class ExceptionFilter : IAsyncExceptionFilter
    {
        public Task OnExceptionAsync(ExceptionContext context)
        {
            // 如果异常没有被处理
            if(!context.ExceptionHandled){
                int code = 0;
                if (!context.ExceptionHandled)
                {
                    code = 1;
                }
                // 定义返回类型
                var result = new ApiResult<String>
                {
                    Code = code,
                    Message = context.Exception.Message,
                    Data = ""
                };
                context.Result = new ContentResult
                {
                    // 返回状态码为200,表示正常
                    StatusCode = (int)HttpStatusCode.OK,
                    // 设置返回格式
                    ContentType = "application/json",
                    Content = JsonConvert.SerializeObject(result)
                };
                // 设置为true,表示异常以及被处理了
                context.ExceptionHandled = true;
               
            }
            return Task.CompletedTask;
        }
    }
}

过滤器注册

builder.Services.AddControllers(o => o.Filters.Add(typeof(ExceptionFilter)));

image.png

测试

image.png

image.png