学海无涯

导航

ASP.NET Core API 自定义全局异常

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

namespace LG.ERP.API.CustomerFilters
{
    /// <summary>
    /// 自定义异常过滤器
    /// </summary>
    public class CustomerExceptionFilter : IAsyncExceptionFilter
    {
        private readonly ILogger<CustomerExceptionFilter> _logger;

        public CustomerExceptionFilter(ILogger<CustomerExceptionFilter> logger)
        {
            _logger = logger;
        }

        public Task OnExceptionAsync(ExceptionContext context)
        {
            if (context == null) throw new ArgumentNullException(nameof(context));

            // 记录异常日志
            _logger.LogError(context.Exception, "未处理的异常:{Message}", context.Exception.Message);

            // 设置返回结果
            context.Result = new ObjectResult(new
            {
                Message = "服务器发生错误,请稍后再试。",
                Detail = context.Exception.Message
            })
            {
                StatusCode = 500
            };

            // 标记异常已处理
            context.ExceptionHandled = true;

            return Task.CompletedTask;
        }
    }  
} 
在 Program.cs 文件的控制器中注册
 builder.Services.AddControllers(options =>
 {
     options.Filters.Add<CustomerExceptionFilter>();
 });

  

posted on 2025-10-06 10:51  宁静致远.  阅读(11)  评论(0)    收藏  举报