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

如何在ASP.NET Framework 4.5中关闭JSON错误响应

解决旧应用JSON错误响应暴露敏感信息的问题

针对你的场景,以下是几种不同技术栈下的解决方案,可根据项目实际情况选择:

ASP.NET Core 项目

1. 自定义异常中间件

通过中间件捕获全局异常,返回通用安全提示:

public class CustomExceptionHandlerMiddleware
{
    private readonly RequestDelegate _next;

    public CustomExceptionHandlerMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception)
        {
            context.Response.ContentType = "application/json";
            context.Response.StatusCode = StatusCodes.Status500InternalServerError;
            await context.Response.WriteAsync("{\"message\": \"服务器发生错误,请稍后重试\"}");
        }
    }
}

在Program.cs中注册中间件(需放在UseRouting和UseEndpoints之前):

app.UseMiddleware<CustomExceptionHandlerMiddleware>();

2. 全局异常过滤器

如果项目使用过滤器处理异常,可替换为自定义过滤器:

public class CustomExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        context.Result = new JsonResult(new { message = "服务器发生错误,请稍后重试" })
        {
            StatusCode = StatusCodes.Status500InternalServerError
        };
        context.ExceptionHandled = true;
    }
}

在Program.cs或Startup.cs中注册过滤器:

services.AddControllersWithViews(options =>
{
    options.Filters.Add<CustomExceptionFilter>();
});

ASP.NET Framework 项目

1. 修改Global.asax的全局错误处理

在Global.asax中重写Application_Error事件:

protected void Application_Error(object sender, EventArgs e)
{
    Server.ClearError();

    Response.ContentType = "application/json";
    Response.StatusCode = 500;
    Response.Write("{\"message\": \"服务器发生错误,请稍后重试\"}");
}

2. 配置Web.config的自定义错误

确保customErrors模式为On,并指向自定义错误处理:

<configuration>
  <system.web>
    <customErrors mode="On" defaultRedirect="~/Error/Generic">
      <error statusCode="500" redirect="~/Error/Generic" />
    </customErrors>
  </system.web>
</configuration>

然后创建ErrorController返回JSON响应:

public class ErrorController : Controller
{
    public ActionResult Generic()
    {
        Response.StatusCode = 500;
        return Json(new { message = "服务器发生错误,请稍后重试" }, JsonRequestBehavior.AllowGet);
    }
}

额外排查点

  • 检查项目是否引入第三方错误处理库(如ELMAH),需配置这类库不返回详细错误信息,或覆盖其响应逻辑
  • 验证所有异常场景(接口报错、页面报错等),确保通用提示正常输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:35:10