如何捕获Web API 2中的所有异常?

时间:2014-08-20 01:25:24

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

我在Web API中编写RESTful API,但我不确定如何有效地处理错误。我希望API返回JSON,它需要每次都包含完全相同的格式 - 即使出现错误。以下是一些成功和失败的响应可能是什么样的例子。

成功:

{
    Status: 0,
    Message: "Success",
    Data: {...}
}

错误:

{
    Status: 1,
    Message: "An error occurred!",
    Data: null
}

如果有异常 - 任何异常,我想返回一个像第二个一样的响应。什么是万无一失的方法,以便没有未处理的例外?

1 个答案:

答案 0 :(得分:12)

实施IExceptionHandler

类似的东西:

 public class APIErrorHandler : IExceptionHandler
 {
     public Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
     {
         var customObject = new CustomObject
             {
                 Message = new { Message = context.Exception.Message }, 
                 Status = ... // whatever,
                 Data = ... // whatever
             };

        //Necessary to return Json
        var jsonType = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;    

        var response = context.Request.CreateResponse(HttpStatusCode.InternalServerError, customObject, jsonType);

        context.Result = new ResponseMessageResult(response);

        return Task.FromResult(0);
    }
}

并在WebAPI的配置部分(public static void Register(HttpConfiguration config))中写道:

config.Services.Replace(typeof(IExceptionHandler), new APIErrorHandler());