You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中如何隐藏System.Exception错误仅在Swagger返回自定义异常消息

解决方案

你看到的行号属于异常堆栈跟踪信息,默认ASP.NET Core在开发环境会返回完整堆栈用于调试,要仅返回自定义异常消息可以按以下方案操作:

  • 首选方案:添加全局异常处理中间件
    这是最规范的实现方式,统一捕获所有接口抛出的异常,自定义返回格式,完全屏蔽堆栈信息。
    1. 新建全局异常处理中间件类
    public class GlobalExceptionMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly IWebHostEnvironment _env;
    
        public GlobalExceptionMiddleware(RequestDelegate next, IWebHostEnvironment env)
        {
            _next = next;
            _env = env;
        }
    
        public async Task InvokeAsync(HttpContext context)
        {
            try
            {
                await _next(context);
            }
            catch (Exception ex)
            {
                context.Response.ContentType = "application/json";
                // 处理自定义的书籍已存在异常
                if (ex is BookExistException)
                {
                    context.Response.StatusCode = StatusCodes.Status409Conflict;
                    await context.Response.WriteAsJsonAsync(new { message = ex.Message });
                    return;
                }
                // 其他异常分环境处理
                context.Response.StatusCode = StatusCodes.Status500InternalServerError;
                var errorMsg = _env.IsDevelopment() ? ex.Message : "服务器内部错误";
                await context.Response.WriteAsJsonAsync(new { message = errorMsg });
            }
        }
    }
    
    1. 在Program.cs中注册中间件,注意要放在所有接口相关中间件的最前面,保证能捕获所有请求的异常
    var builder = WebApplication.CreateBuilder(args);
    // 此处保留你原有服务注册代码,如AddControllers、AddSwaggerGen、AddDbContext等
    
    var app = builder.Build();
    
    // 注册全局异常中间件,必须放在最顶部
    app.UseMiddleware<GlobalExceptionMiddleware>();
    
    // 此处保留你原有中间件配置,如UseSwagger、UseAuthentication、MapControllers等
    
  • 临时方案:关闭开发环境详细错误页
    如果你不需要自定义返回格式,仅要屏蔽堆栈信息,可以直接修改Program.cs中的开发者异常页配置:
    if (app.Environment.IsDevelopment())
    {
        // 删掉下面这行即可关闭堆栈信息返回
        // app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI();
    }
    

    注意:该方案返回的错误格式为系统默认格式,自定义程度低,仅适合临时调试使用,生产环境推荐优先使用全局异常中间件方案。

配置完成后,Swagger请求错误时就只会返回你抛出的Book already exist自定义消息,不会再显示代码行号等堆栈信息。

内容的提问来源于stack exchange,提问作者user15811966

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:36:07