我试图抛出一些异常,在HandleException
属性中捕获它并将其正确地返回给客户端。
以下是一个例子:
[HandleException(Type = typeof(UserNotFoundException), Status = HttpStatusCode.NotFound)]
[HandleException(Type = typeof(LoginFailedException), Status = HttpStatusCode.Unauthorized)]
public UserProfile Login(UserCredentials userCred)
在我的Login()
函数中,我要么抛出UserNotFoundException
或LoginFailedException
。
我的HandleExceptionAttribute
看起来像这样:
public class HandleExceptionAttribute : ExceptionFilterAttribute
{
public Type Type { get; set; }
public HttpStatusCode Status { get; set; }
public override void OnException(HttpActionExecutedContext context)
{
var ex = context.Exception;
ResponseHelper.CreateException(Status, ex.Message);
}
}
我想要的是能够处理将抛出什么类型的异常并在属性中正确处理它,我在其中指定了HttpStatusCode。
使用此代码的问题是始终调用最顶层的属性。因此,即使异常是LoginFailedException
,我总是得到UserNotFoundException
并且404代码返回给客户端。
我怎样才能做到这一点?
答案 0 :(得分:1)
就在我的脑海中,您似乎需要在OnException
方法中进行一些过滤,以便验证您获得的异常是否与您预期的实例相匹配。要处理的属性。
public override void OnException(HttpActionExecutedContext context)
{
var ex = context.Exception;
if(typeof(ex) == Type)
ResponseHelper.CreateException(Status, ex.Message);
}