ABP(現代ASP.NET樣板開發框架)系列之2三、ABP展示層——異常處理

點這裏進入ABP系列文章總目錄javascript

 

基於DDD的現代ASP.NET開發框架--ABP系列之2三、ABP展示層——異常處理
html

 

ABP是「ASP.NET Boilerplate Project (ASP.NET樣板項目)」的簡稱。java

ABP的官方網站http://www.aspnetboilerplate.comgit

ABP在Github上的開源項目https://github.com/aspnetboilerplategithub

 


 

在 web 應用程序中,異常一般是在 MVC Controller actions 和 Web API Controller actions 中被處理的。當異常發生時,應用程序用戶被以某種方式告知該錯誤和該錯誤產生的可選緣由(就是列舉出產生該異常的多種緣由,產生錯誤的緣由多是列舉出的一種也多是多種。)web

若是一個常規的HTTP請求產生錯誤,那麼一個錯誤頁面會展現。若是AJAX請求產生錯誤,服務器端會發送錯誤消息到客戶端,而後客戶端處理並顯示該錯誤給用戶。ajax

在全部的Web請求中處理異常是一個單調乏味而且重複性的工做。然而在ABP中,你幾乎不需爲任何異常的指定明確的異常處理,ABP會自動的記錄這些異常而且以適當的格式作出響應返回到客戶端。也就是說,在客戶端處理這些響應而且將錯誤詳細顯示給客戶。api

開啓錯誤處理

爲了開啓錯誤處理, customErrors 必須設置以下:服務器

<customErrors mode="On" />

也能夠設置 'RemoteOnly' 若是你不想在本地處理這些錯誤。架構

非Ajax請求

若是不是Ajax 請求,那麼將會顯示一個錯誤頁面。

顯示異常(Showing exceptions)

MVC Controller action拋出了一個異常,以下所示:

public ActionResult Index()
{
    throw new Exception("A sample exception message...");
}

固然,這個異常可以被指定調用的action中的另外的方法拋出。ABP處理這個異常,記錄異常信息而且顯示'Error.cshtml' 視圖。你可以自定義這個視圖來顯示該錯誤。example 錯誤視圖(這個視圖是ABP中缺省錯誤視圖模板)。

ABP 隱藏了異常的詳細信息,而是向用戶展現了一個標準的(本地化的,友好化的)錯誤信息。除非你明確指定拋出一個UserFriendlyException 異常。

用戶異常友好化(UserFriendlyException)

UserFriendlyException是一個特殊的異常類型,被用來直接的顯示給用戶。請看下面示例:

public ActionResult Index()
{
    throw new UserFriendlyException("Ooppps! There is a problem!", "You are trying to see a product that is deleted...");
}

ABP記錄這個異常而且不隱藏此次的異常信息:

因此,若是你想顯示一個特殊的錯誤信息給用戶,你只須要拋出一個UserFriendlyException(或者一個派生自該異常類的類型,也就是說繼承這個異常類的子類)。

錯誤模型(Error model)

ABP傳遞一個ErrorViewModel 對象給Error視圖:

public class ErrorViewModel
{
    public AbpErrorInfo ErrorInfo { get; set; }
    public Exception Exception { get; set; }
}

ErrorInfo 包含了可以顯示給客戶的詳細的異常信息。Exception 對象就是那個被拋出的異常。你可以覈實異常而且附加自定義信息來顯示,若是你想這樣作的話。例如:咱們可以覈實該異常是不是一個AbpValidationException。

AJAX請求

若是請求是一個AJAX請求,ABP會返回一個JSON對象到客戶端。ASP.NET MVC Controllers 和 ASP.NET Web API Controllers 也是這麼處理的。以JSON方式返回一個異常信息,請看下面示例:

{
  "targetUrl": null,
  "result": null,
  "success": false,
  "error": {
    "message": "An internal error occured during your request!",
    "details": "..."
  },
  "unAuthorizedRequest": false
}

success: false 表示有一個錯誤發生。error對象提供了錯誤信息和錯誤的詳細描述。

當你在客戶端用ABP的基礎設施來作一個AJAX請求時,它會用message API自動的處理這個JSON對象而且顯示錯誤信息給用戶。更多信息請參照AJAX API 和dynamic web api layer。

異常事件

當ABP處理任何Web請求的異常時,它會觸發AbpHandledExceptionData事件,固然你必須註冊該事件,而且寫相應的處理代碼。詳細信息請參照eventbus documentation。

 


 

但願更多國內的架構師能關注到ABP這個項目,也許這其中有能幫助到您的地方,也許有您的參與,這個項目能夠發展得更好。

歡迎加QQ羣:

ABP架構設計交流羣:134710707 ABP架構設計交流羣      ABP架構設計交流2羣: 579765441ABP架構設計交流羣2

 

點這裏進入ABP系列文章總目錄

相關文章
相關標籤/搜索