程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> <<ABP文檔>> 異常處理,abp文檔異常處理

<<ABP文檔>> 異常處理,abp文檔異常處理

編輯:關於.NET

<<ABP文檔>> 異常處理,abp文檔異常處理


 

文檔目錄

 

本節內容:

  • 簡介
  • 啟用錯誤處理
  • 非AJAX請求
    • 顯示異常
    • UserFriendlyException
    • Error 模型
  • AJAX 請求
  • 異常事件

 

簡介

這個文檔針對Asp.net Mvc和Web Api,如果你對Asp.net Core感興趣,請看Asp.net Core文檔。

在一個Web應用裡,異常通常在Mvc控制器的Action或Web Api 控制器的Action裡被處理,當一個異常姓時,應用的用戶會通過某種方式收到錯誤信息和錯誤的可能原因。

如果一個錯誤發生在平常的HTTP請求裡,會顯示一個頁面錯誤,如果一個錯誤發生在一個AJAX請求裡,服務端把錯誤發給客戶端,客戶端負責處理和顯示給用戶。

在所有Web請求裡,處理異常是一件乏味且重復的事情,ABP自動化了這一過程,你幾乎不用顯式處理任何異常,ABP處理所有異常、日志記錄它們並返回對應的格式化的響應給客戶端,同時在客戶端處理這個響應並顯示錯誤信息給用戶。

 

啟用錯誤處理

要啟用ABP控制器的錯誤處理,customErrors的mode必須啟用:

<customErrors mode="On" />

如果你不想在本地計算上處理錯誤,可以把它設置為“RemoteOnly”。

注意:只需要為Asp.net Mvc控制器設置這個,Web Api 和 Asp.net Core 的控制器不需要設置。

 

非Ajax請求

如果不是一個AJAX請求,將顯示一個錯誤頁面。

 

顯示異常

此處,有一個Mvc控制器的Action拋出一個任意的異常:

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

當然,這個異常也會被調用這個Action的另一個方法拋出,ABP處理這個異常、日志記錄它並顯示“Error.cshtml”視圖,你可以自定義這個視圖來顯示錯誤,一個錯誤視圖的示例(在ABP模板裡默認的Error視圖):

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 模型

ABP傳遞一個ErrorViewModel對象作為模型給Error視圖:

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

    public Exception Exception { get; set; }
}

ErrorInfo包含能顯示給用戶的錯誤細節信息,Exception對象就是拋出的異常,你可以核實它並顯示額外的信息,例如,如果它是一個AbpValidationException,你可以顯示驗證錯誤信息:

 

AJAX 請求

如果Mvc的Action返回類型是JsonResult(或異步Action的Task<JsonResult>),ABP在遇到異常時,返回一個JSON對象給客戶端,示例為一個錯誤的返回對象:

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

success:false表明它是一個錯誤,error對象提供了錯誤message(信息)和details(明細)。

當你使用ABP基礎架構在客戶端發送AJAX請求,它自動處理這個JSON對象,並使用message API顯示錯誤信息給用戶,更多信息查看AJAX Api。

 

異常事件

當ABP處理任何異常時,它會觸發一個AbpHandledExceptionData事件,它可被注冊後通知並發出通知(查看事件總線文檔獲取更多信息),例如:

public class MyExceptionHandler : IEventHandler<AbpHandledExceptionData>, ITransientDependency
{
    public void HandleEvent(AbpHandledExceptionData eventData)
    {
        //TODO: Check eventData.Exception!
    }
}

如果你把這個示例類加入到你的應用(通常是Web應用),當ABP處理異常時,HandleEvent方法將被調用,所以,你可以深入的檢查這個異常處理。

 

kid1412附:英文原文:http://www.aspnetboilerplate.com/Pages/Documents/Handling-Exceptions

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved