根据异常类型处理异常/ HTTP状态代码

时间:2014-09-27 20:57:07

标签: c# exception-handling custom-attributes

我试图抛出一些异常,在HandleException属性中捕获它并将其正确地返回给客户端。

以下是一个例子:

[HandleException(Type = typeof(UserNotFoundException), Status = HttpStatusCode.NotFound)]
[HandleException(Type = typeof(LoginFailedException), Status = HttpStatusCode.Unauthorized)]
public UserProfile Login(UserCredentials userCred)

在我的Login()函数中,我要么抛出UserNotFoundExceptionLoginFailedException

我的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代码返回给客户端。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

就在我的脑海中,您似乎需要在OnException方法中进行一些过滤,以便验证您获得的异常是否与您预期的实例相匹配。要处理的属性。

public override void OnException(HttpActionExecutedContext context)
{
    var ex = context.Exception;
    if(typeof(ex) == Type)        
        ResponseHelper.CreateException(Status, ex.Message);
}