Bil*_*man 6 c# asp.net-mvc asp.net-mvc-4 asp.net-web-api
在我的MVC WebApi服务中,当抛出异常时,它由过滤器处理:
public class GlobalExceptionFilter : ExceptionFilterAttribute {
public override void OnException(HttpActionExecutedContext context) {
context.Response = context.Request.CreateErrorResponse(HttpStatusCode.BadRequest,
"Bad Request",
context.Exception);
}
}
Run Code Online (Sandbox Code Playgroud)
此过滤器生成的此HTTP响应取决于config.IncludeErrorDetailPolicy配置.
如果我设置config.IncludeErrorDetailPolicy到IncludeErrorDetailPolicy.Always,所有的细节都序列化到HTTP响应(Message,ExceptionMessage,ExceptionType和StackTrace).
如果我设置config.IncludeErrorDetailPolicy为IncludeErrorDetailPolicy.Never,则仅Message包括.
不过,我想包括Message,ExceptionMessage和ExceptionTypeHTTP响应,但不是StackTrace; 我该如何只排除StackTrace?或者我应该将所需的详细信息连接到Message字段中?
要在我的问题中添加一些上下文,客户端需要这些异常细节来处理特殊情况......但绝不是堆栈跟踪.
谢谢你指出我正确的方向莱昂.您的链接启发了我的解决方案.它保留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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2697 次 |
| 最近记录: |