gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:17:17 27 4
gpt4 key购买 nike

在我的 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 配置。

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

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

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

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

最佳答案

感谢 Leon 为我指明了正确的方向。您的链接启发了我在下面的解决方案。它保留了 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);
}
}

关于c# - 没有堆栈跟踪的错误详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27372392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com