如何在ExceptionFilterAttribute中返回自定义信息?

时间:2016-06-30 20:54:45

标签: c# asp.net-web-api

项目负责人希望我为Web API创建一个自定义异常过滤器,以捕获所有未处理的异常。我在我们的WebApiConfig文件中添加了一个自定义过滤器,它正在工作,但它没有提供他想要的所有细节。他希望在正文中返回500错误信息:

{
  "code": 500,
  "message": "My custom message"
}

下面显示的处理程序代码返回500错误,但正文仅显示

{
  "message": "My custom message"
}

如何自定义此选项以添加“代码”编号,即使该信息是多余的?

public class UnhandledExceptionAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        string message = "My custom message";
        context.Response = context.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, message);
    }
}

1 个答案:

答案 0 :(得分:1)

只需使用CreateResponse<T>扩展程序:

public class UnhandledExceptionAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        string message = "My custom message";
        context.Response = context.Request.CreateResponse(
            HttpStatusCode.InternalServerError,
            new {
                code = 500,
                message = message
            });
    }
}