簡體   English   中英

根據異常類型處理異常/ HTTP狀態代碼

[英]Handle exceptions / HTTP status code based on exception types

我試圖引發一些異常,將其捕獲在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代碼返回給客戶端。

我該如何實現?

就在我的頭頂上,看起來您將需要在OnException方法中進行一些過濾,以便您驗證所獲取的異常是否與您打算將該屬性實例處理的異常匹配。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM