1.使用中间件做全局异常处理,具体代码如下:
public class CustomExceptionMiddleware { private readonly RequestDelegate _next; private readonly ILogger<CustomExceptionMiddleware> _logger; public CustomExceptionMiddleware(RequestDelegate next, ILogger<CustomExceptionMiddleware> logger) { _next = next; _logger = logger; } public async Task Invoke(HttpContext httpContext) { try { await _next(httpContext); } catch (Exception ex) { _logger.LogError(ex, "Unhandled exception..."); await HandleExceptionAsync(httpContext, ex); } } private Task HandleExceptionAsync(HttpContext httpContext, Exception ex) { var result = JsonConvert.SerializeObject(new { isSuccess = false, message = ex.Message }); httpContext.Response.ContentType = "application/json;charset=utf-8"; return httpContext.Response.WriteAsync(result); } } // Extension method used to add the middleware to the HTTP request pipeline. public static class CustomExceptionMiddlewareExtensions { public static IApplicationBuilder UseCustomExceptionMiddleware(this IApplicationBuilder builder) { return builder.UseMiddleware<CustomExceptionMiddleware>(); } }
然后在Startup类的Configure方法里添加上述扩展的中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseCustomExceptionMiddleware(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
2.使用过滤器做全局异常处理,具体代码如下:
public class CustomerExceptionFilter : ExceptionFilterAttribute { private readonly ILogger<CustomerExceptionFilter> _logger; public CustomerExceptionFilter(ILogger<CustomerExceptionFilter> logger) { _logger = logger; } public override void OnException(ExceptionContext context) { Exception ex = context.Exception; HttpRequest request = context.HttpContext.Request; string requestUrl = $"{request.Scheme}://{request.Host.Value}{request.Path}"; string errorMsg = $"error:{ex.GetBaseException().Message};requesturl:{requestUrl}"; _logger.LogError(errorMsg); var result = new { code = 0, msg = errorMsg, data = "" }; string json = JsonConvert.SerializeObject(result); context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; context.HttpContext.Response.ContentType = "application/json;charset=utf-8"; context.HttpContext.Response.WriteAsync(json); context.ExceptionHandled = true; } }
分类:
.NET Core
标签:
.NET CORE3.1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?