加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:16:32 所属栏目:百科 来源:网络整理
导读:在我的MVC WebApi服务中,当抛出异常时,它由过滤器处理: public class GlobalExceptionFilter : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { context.Response = context.Request.CreateErrorRespon
在我的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,ExceptionMessage,ExceptionType和StackTrace).

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

但是,我想在HTTP响应中包含Message,ExceptionMessage和ExceptionType,但不包括StackTrace;如何只排除StackTrace?或者我应该将所需的详细信息连接到Message字段中?

要在我的问题中添加一些上下文,客户端需要这些异常细节来处理特殊情况……但绝不是堆栈跟踪.

解决方法

谢谢你指出我正确的方向莱昂.您的链接启发了我的解决方案.它保留CreateErrorResponse方法的功能并附加ExceptionMessage和ExceptionType属性.
public class GlobalExceptionFilter : ExceptionFilterAttribute {
    public override void OnException(HttpActionExecutedContext context) {
        context.Response = context.Request.CreateErrorResponse(HttpStatusCode.BadRequest,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);
    } 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读