我在Web API中编写RESTful API,但我不确定如何有效地处理错误。我希望API返回JSON,它需要每次都包含完全相同的格式 - 即使出现错误。以下是一些成功和失败的响应可能是什么样的例子。
成功:
{
Status: 0,
Message: "Success",
Data: {...}
}
错误:
{
Status: 1,
Message: "An error occurred!",
Data: null
}
如果有异常 - 任何异常,我想返回一个像第二个一样的响应。什么是万无一失的方法,以便没有未处理的例外?
答案 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());