没有堆栈跟踪的错误详细信息

本文关键字:错误 详细信息 跟踪 堆栈 | 更新日期: 2023-09-27 18:33:34

在我的MVC WebApi服务中,当抛出异常时,它由过滤器处理:

public class GlobalExceptionFilter : ExceptionFilterAttribute {
    public override void OnException(HttpActionExecutedContext context) {
        context.Response = context.Request.CreateErrorResponse(HttpStatusCode.BadRequest, 
                                                               "Bad Request", 
                                                               context.Exception);
    } 
}

筛选器生成的此 HTTP 响应取决于配置。包括错误详细信息策略配置。

如果我将config.IncludeErrorDetailPolicy设置为 IncludeErrorDetailPolicy.Always,则所有的详细信息都会序列化到 HTTP 响应中(MessageExceptionMessageExceptionTypeStackTrace)。

如果我将config.IncludeErrorDetailPolicy设置为 IncludeErrorDetailPolicy.Never ,则仅包含Message

但是,我想在HTTP响应中包含MessageExceptionMessageExceptionType,而不是StackTrace;如何仅排除StackTrace? 还是我应该将所需的详细信息连接到"消息"字段中?

为了向我的问题添加一些上下文,客户端需要这些异常详细信息来处理特殊情况......但从不堆栈跟踪。

没有堆栈跟踪的错误详细信息

谢谢你为我指出正确的方向莱昂。 您的链接启发了我在下面的解决方案。 它保留CreateErrorResponse方法的功能,并追加ExceptionMessageExceptionType属性。

public class GlobalExceptionFilter : ExceptionFilterAttribute {
    public override void OnException(HttpActionExecutedContext context) {
        context.Response = context.Request.CreateErrorResponse(HttpStatusCode.BadRequest, 
                                                               "Bad Request", 
                                                               context.Exception);
            var httpError = (HttpError)((ObjectContent<HttpError>)context.Response.Content).Value;
            if (!httpError.ContainsKey("ExceptionType"))
                httpError.Add("ExceptionType", context.Exception.GetType().FullName);
            if (!httpError.ContainsKey("ExceptionMessage"))
                httpError.Add("ExceptionMessage", context.Exception.Message);
    } 
}

连接:否

覆盖和扩展:是

在此处查看已接受的答案:在 Web API 中返回自定义错误对象

以及更多信息(一般)在这里:抛出 HttpResponseException 或返回 Request.CreateErrorResponse?

相关文章: