在WebApi的开发中,通常会Global.asax中使用config.Filters.Add(new GlobalExceptionAttribute())来注册一个全局的异常GlobalExceptionAttribute来处理异常,比如UnauthorizedAccessException,ValidationException等,但这些异常只是直接抛回了html的页,在WebAPI的请求中处理并不是太友好,如果能够返回json,那么处理起来会比较方便。比如返回的json和正常数据的json结构是一致的,至少status和message这两个字段都有,那么通过status的判断就可以知道是否异常了。
在GlobalExceptionAttribute的类中重载 OnException方法,然后在内部进行过滤,比如未授权异常。
HttpResponseException(context.Request.CreateResponse(HttpStatusCode.Unauthorized, new ServiceStatus()
{
Status = (int)HttpStatusCode.Unauthorized,
Message = "UnAuthorized",
ReasonPhrase = "UnAuthorized Access." + context.Exception.Message
}));
其中ServiceStatus是自定义的一个类
/// <summary>
/// 服务状态
/// </summary