日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

ABP框架展示异常信息

發(fā)布時(shí)間:2023/11/27 生活经验 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABP框架展示异常信息 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  接觸ABP框架有一段時(shí)間了,也遇到了一些問(wèn)題,看了官網(wǎng)文檔,但是或許是看的不夠細(xì)致的原因,實(shí)際開(kāi)發(fā)中還是遇到了一些問(wèn)題,耗費(fèi)了時(shí)間去處理,回頭一看,原來(lái)文檔中早已提及。

  開(kāi)發(fā)環(huán)境:ABP+MPA模式+Asp.Net Core

?

一、異常信息處理

  猶如ABP官網(wǎng)文檔所介紹的,ABP已經(jīng)幫我們把異常這塊處理的很完善了,我們要做的就是利用好ABP處理異常的功能。

?  

  ABP提供了直接將應(yīng)用層對(duì)外服務(wù)的功能,通過(guò)ABP運(yùn)行時(shí)所創(chuàng)建的動(dòng)態(tài)API層,我們可以使用js方法去直接調(diào)用應(yīng)用層服務(wù),當(dāng)然直接訪問(wèn)控制器下的方法并沒(méi)有被舍棄。

  

  在ABP內(nèi)自動(dòng)封裝好了一批處理異常的類,配合著這些異常類的使用,ABP在前端也封裝了一些方法,方便我們處理異常信息,同時(shí)我們也可以改造前端在展示異常的方式,ABP封裝的是使用Message API展示異常信息并使用的是sweetAlert插件,ABP前端js中提供了方式可以使得我們阻止默認(rèn)的展示,進(jìn)而使用自定義的展示插件和展示方式。

  

?  在封裝的類中,UserFriendlyException是對(duì)用戶友好的,對(duì)于一些操作可能產(chǎn)生的問(wèn)題,可以通過(guò)拋出UserFriendlyException直接展示給用戶看,而對(duì)于其它異常,前端會(huì)將詳細(xì)信息的隱藏,因?yàn)橛脩舨⒉粫?huì)關(guān)心具體報(bào)錯(cuò)原因,只知道是報(bào)錯(cuò)了。在代碼中,有些操作可能需要我們進(jìn)行判斷,然后反饋給用戶,以便提示用戶更改相關(guān)數(shù)據(jù)。

[AbpAuthorize(AppPermissions.Pages_Standard_ItemCode_Create)]
private async Task CreateItemCodeAsync(CreateOrUpdateItemCodeInput input)
{var itemCode = ObjectMapper.Map<ItemCode>(input.ItemCode);itemCode.Id = itemCode.CreateUniqueItemCode();var existedItemCode = await _itemCodeRepository.FirstOrDefaultAsync(t => t.Id.Equals(itemCode.Id));if (existedItemCode != null){throw new UserFriendlyException(L("該檢測(cè)項(xiàng)目已經(jīng)存在."));}await _itemCodeRepository.InsertAsync(itemCode);
}

  如上,在做一個(gè)操作前,可能需要判斷是否有相同的記錄,如果有,需要提示給用戶,通過(guò)直接拋出UserFriendlyException,在控制器內(nèi)或在應(yīng)用層拋出異常都行,可以將信息直接呈現(xiàn)給用戶,但是需要注意的是有一些條件限制,需要滿足相關(guān)的條件才能獲取到該錯(cuò)誤信息,否則很有可能拿到如下結(jié)果或是英文錯(cuò)誤:"An error has occurred! Error detail not sent by server."

  

?

二、展示異常信息的方式

  在ABP文檔中,專門(mén)有一篇文章是處理異常的,https://aspnetboilerplate.com/Pages/Documents/Handling-Exceptions。

?  

  1、非Ajax請(qǐng)求,則直接展示錯(cuò)誤頁(yè),此處模擬拋出兩種異常類型,然后在界面中看異常信息。

public IActionResult Index()
{//throw new System.Exception("error message");throw new UserFriendlyException("error message");
}

  如果是拋出的異常不是UserFriendlyException類型,則錯(cuò)誤頁(yè)中展示的信息可能會(huì)被隱藏,展示的是描述性的,只需要知道內(nèi)部出錯(cuò)就行。

  

  當(dāng)拋出的是UserFriendlyException類型時(shí),可以看到一些直觀的錯(cuò)誤信息。

  

  當(dāng)然,可以在WebCoreModule模塊的預(yù)加載方法中啟動(dòng)展示詳細(xì)信息。

Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;

?  比如開(kāi)啟后,可以看到如下具體錯(cuò)誤信息,雖然這些信息對(duì)于用戶來(lái)講是沒(méi)有什么價(jià)值的。

  

  2、Ajax請(qǐng)求中,跟著官方給定的文檔走一遍是沒(méi)有錯(cuò)的,就怕一些小細(xì)節(jié)沒(méi)有把握到,然后產(chǎn)生大問(wèn)題,Ajax形式的調(diào)用并結(jié)合WrapResult特性使用后,在出現(xiàn)異常時(shí),會(huì)將數(shù)據(jù)封裝成如下簡(jiǎn)約形式。

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

?  這里需要注意一個(gè)關(guān)鍵的一點(diǎn),是調(diào)用控制器下某個(gè)方法的返回類型,必須要object、JsonResult和ObjectResult類型,否則將會(huì)頁(yè)面錯(cuò)誤框中看不到具體的錯(cuò)誤信息。

  

  從開(kāi)發(fā)習(xí)慣來(lái)講,控制器中的方法返回值類型,我喜歡寫(xiě)如下的格式(錯(cuò)誤用法),直接使用IActionResult很方便,但是也會(huì)有麻煩,

[HttpPost]
public async Task<IActionResult> CreateXXX([FromBody]ItemCodeViewModel itemCodeViewModel)
{
  //do something...return Json(xxx)); }

?  當(dāng)在中拋出異常或是方法內(nèi)調(diào)用應(yīng)用層服務(wù)內(nèi)拋出異常時(shí),界面上的方法總是無(wú)法獲取到異常信息,通過(guò)查看瀏覽器內(nèi)響應(yīng)的內(nèi)容總是只會(huì)有錯(cuò)誤頁(yè)響應(yīng)回來(lái),而頁(yè)面內(nèi)只能看到"An error has occurred! Error detail not sent by server."

  

  具體原因就是這個(gè)方法的返回值不符合ABP文檔給定的要求,而這些細(xì)節(jié),在初看文檔或是二次看文檔中都沒(méi)有發(fā)現(xiàn)它,細(xì)節(jié)很重要!!!

  3、直接通過(guò)動(dòng)態(tài)Api層請(qǐng)求應(yīng)用層服務(wù),這種情形下,當(dāng)應(yīng)用層拋出異常時(shí),會(huì)將異常信息經(jīng)WrapResult封裝,在前端獲取的錯(cuò)誤信息便是直接封裝完畢的錯(cuò)誤信息,然后再經(jīng)處理展示到頁(yè)面中。

?

2019-04-27,望技術(shù)有成后能回來(lái)看見(jiàn)自己的腳步

轉(zhuǎn)載于:https://www.cnblogs.com/CKExp/p/10776948.html

總結(jié)

以上是生活随笔為你收集整理的ABP框架展示异常信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。