Web API 自定義異常結果的處理

2021-09-07 08:24:13 字數 2577 閱讀 8824

統一的異常處理,把正確的資訊返回給呼叫者很重要,可以讓介面開發人員或者使用者,了解具體的原因所在,這樣可以得到有效的錯誤處理。

我們根據自己的需要,定義了乙個統一的錯誤資訊實體類,如下所示。

/// /// 介面返回的錯誤資訊

///

public class baseresultjson

/// /// 如果不成功,返回的錯誤資訊

///

public string errmsg

/// /// 是否成功

///

public bool success

}

這樣我們就可以把攔截到的錯誤資訊,轉換為這樣乙個方便使用的實體類資訊了。

攔截web api的呼叫異常,一般可以結合try catch的方法,以及異常***進行處理,如下是主動丟擲的一些異常資訊處理。

//如果沒有通過,則丟擲異常,由異常過濾器統一處理

if (!result.success)

其中myapiexception是自定義的乙個異常資訊,用來承載自定義錯誤資訊的異常類。

異常***,我們在web api裡面可以通過attribute這種標籤特性進行處理,如下是我在web api的基類裡面定義了乙個異常處理器。

/// /// 所有介面基類

///

[exceptionhandling]

public class baseapicontroller : apicontroller

這個特性物件的定義,它的**如下所示。

/// /// api自定義錯誤過濾器屬性

///

public class exceptionhandlingattribute : exceptionfilterattribute);}

//記錄關鍵的異常資訊

debug.writeline(context.exception);

//常規異常的處理

}

根據這些**,我們就可以實現對呼叫異常的統一封裝處理,讓它給我們返回統一的物件資訊了,如下是其中乙個呼叫異常,轉換為自定義異常資訊後的結果輸出。

這樣我們在處理web api的返回結果的時候,可以先處理它的異常資訊,具體的處理**如下所示。

我們在上面紅色部分的**就是先處理異常定義資訊,如果有這些異常,我們可以在介面中進行異常處理顯示了。

例如,如果自定義異常存在,我們轉換後,把對應的資訊顯示出來,重新丟擲異常即可。

baseresultjson errorresult = jsonconvert.deserializeobject(content);

//非成功操作才記錄異常,因為有些操作是返回正常的結果()

if (errorresult != null && !errorresult.success)

,說明:", (int)errorresult.errcode, errorresult.errmsg);

logtexthelper.error(errorresult.tojson());

throw new exception(error);//丟擲錯誤

}

對於常規的異常,我們通過上面的處理方式,就可以很好進行攔截並處理了,如果介面異常是全域性性的,如訪問位址簿正確,或者引數多了幾個資訊,那麼呼叫的介面就不是有效的位址,這樣的話,返回的資訊就不會被上面的***進行處理了。

如我們給乙個無效的api呼叫路徑,在瀏覽器中獲得下面錯誤結果。

上面結果就無法被我們的常規異常***所捕獲,因此不會輸出經過封裝好的異常資訊。

如果需要攔截,我們需要增加自己的訊息**處理,用來捕獲這些特殊的異常資訊。

public static class webapiconfig

if (error != null));}

else

});}

}

經過了上面的處理後,我們進一步測試一下不存在的位址的異常處理結果,可以看到輸出的內容是經過了自定義物件的轉換了。

常規的呼叫,如果介面不對應,那麼錯誤也是類似下面的訊息

有了這些資訊,我們就可以統一我們的呼叫規則,並進行異常記錄和顯示了,非常方便。

異常 自定義異常

package test 01 練習 計算成績的平均值 異常的情況 成績為負數 me 總結 練習寫好乙個程式,思路最重要要做到心中有數,當計算成績的平均值,定義乙個方法,最後這個方法返回平均數即可 關鍵在於 方法的引數是啥?返回值型別是啥?當然是乙個陣列 可變引數組int grades int型別 ...

異常 自定義異常

自己定義的異常類,也就是api中的標準異常類的直接或間接的子類 用自定義異常標記業務邏輯的異常,避免與標準異常混淆 1 建立自定義異常類 2 在方法中通過throw關鍵字拋出自定義異常 public class customexception extends exception 3 呼叫throws...

異常 自定義異常

throwable是所有異常的根。error是錯誤資訊,exception是異常資訊。error 是程式中無法處理的錯誤,表示執行應用程式 現了嚴重的錯誤。此類錯誤一般表示 執行時jvm出現問題。exception 程式本身可以捕獲並且可以處理的異常。捕獲異常 try,catch,finally 丟...