对于我的一个项目,我使用的是带有SOA架构的Web API。在Controller中,我希望捕获异常(由Repository抛出)并返回HttpResposeMessage。我想要的是……
我们使用这样的异常过滤器:
首先我们创建自己的异常:
public class UserFriendlyException: Exception { public UserFriendlyException(string message) : base(message) { } public UserFriendlyException(string message, Exception innerException) : base(message, innerException) { } }
然后我们创建一个过滤器:
public class UserFriendlyExceptionFilterAttribute: ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { var friendlyException = context.Exception as UserFriendlyException; if (friendlyException != null) { context.Response = context.Request.CreateResponse(HttpStatusCode.BadRequest, new {Message = friendlyException.Message}); } } }
最后在WebApi的配置中添加了该过滤器。
public static class WebApiConfig { public static void Register(HttpConfiguration config) { ... config.Filters.Add(new UserFriendlyExceptionFilterAttribute()); ... } }
使用此解决方案,您可以在代码中的任何位置抛出UserFriendlyException,响应将根据过滤器。