【问题标题】:Handle exceptions / HTTP status code based on exception types根据异常类型处理异常/HTTP状态码
【发布时间】:2014-09-28 05:02:43
【问题描述】:

我正在尝试抛出一些异常,在 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 代码返回给客户端。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# exception-handling custom-attributes


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多