没有堆栈跟踪的错误详细信息
本文关键字:错误 详细信息 跟踪 堆栈 | 更新日期: 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 响应中(Message
、ExceptionMessage
、ExceptionType
和 StackTrace
)。
如果我将config.IncludeErrorDetailPolicy
设置为 IncludeErrorDetailPolicy.Never
,则仅包含Message
。
但是,我想在HTTP响应中包含Message
,ExceptionMessage
和ExceptionType
,而不是StackTrace
;如何仅排除StackTrace
? 还是我应该将所需的详细信息连接到"消息"字段中?
为了向我的问题添加一些上下文,客户端需要这些异常详细信息来处理特殊情况......但从不堆栈跟踪。
谢谢你为我指出正确的方向莱昂。 您的链接启发了我在下面的解决方案。 它保留CreateErrorResponse
方法的功能,并追加ExceptionMessage
和ExceptionType
属性。
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?