using dy.net.model.dto; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; namespace dy.net.extension { public class DouyinExceptionFilter : IExceptionFilter { /// /// 异常拦截核心方法 /// public void OnException(ExceptionContext context) { // 1. 记录异常日志(区分业务异常和系统异常) LogException(context); // 2. 构建标准化响应结果 var response = BuildExceptionResponse(context.Exception); // 3. 设置响应结果(终止异常传播) context.Result = new ObjectResult(response); context.ExceptionHandled = true; } /// /// 记录异常日志 /// private void LogException(ExceptionContext ex) { Serilog.Log.Error($"系统异常:{ex.Exception.Message},{ex.HttpContext.Request.Path}"); } /// /// 根据异常类型构建响应结果 /// private static DouyinApiResponse BuildExceptionResponse(Exception ex) { return new DouyinApiResponse { Code = ResponseCode.ServerError, Message = "服务器内部错误,请稍后重试", Data = null, Timestamp = DateTime.UtcNow }; } } /// /// 全局异常过滤器扩展(简化注册) /// public static class GlobalExceptionFilterExtensions { public static IMvcBuilder AddGlobalExceptionFilter(this IMvcBuilder mvcBuilder) { mvcBuilder.AddMvcOptions(options => { options.Filters.Add(); }); return mvcBuilder; } } }