色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 入門指導 > arm webapi遇到異常怎么處理?詳細步驟告訴你

arm webapi遇到異常怎么處理?詳細步驟告訴你 時間:2018-07-20      來源:未知

我們都知道,webapi是作為服務器來使用的,每次客戶端發送http請求到我們的WebApi服務里面,那么服務器就會把結果輸到response到客戶端,在這個步驟中,如果服務器發生異常,那么就會返回500的錯誤,那么在這個時候我們應該如何來處理這樣的異常呢,在這里給你們提供一些處理異常的小技巧。

通常webapi會出現的異常一般有下面幾點:Controller構造方法中出現的異常, MessageHandlers中出現的異常,路由過程中出現的異常,Body在序列化/反序列化過程中出現的異常

由于ExceptionFilter解決不了這些異常,那么為了解決這些問題,webapi還有兩個針對異常記錄、處理的擴展點:那就是IExceptionLogger 和IExceptionHandler。

對于這兩個來說,他們是webapi管道組件進行注冊管理的,他們是有不同分工的。

IExceptionHandler作為異常處理組件,負責異常發生后的處理工作,他處于異常處理管道的最末端,當IExceptionLogger組件進行一場記錄完畢、沒有相關的ExceptoinFilter進行異常處理時,才會最終調用ExceptionHandler進行異常處理,在Web API中,有且僅有一個ExceptionHandler進行異常的處理。

arm webapi

IExceptionLogger作為異常日志記錄組件,負責異常發生后的日志記錄,他貫穿于整個Web API的生命周期中,在Web API框架里,任何一個請求周期中出現任何一個未被捕獲/處理的異常都會首先進入這個異常日志記錄管道進行異常Log記錄,在Web API中可以注冊多個IExceptionLogger實例負責不同的異常處理。

在Web API框架中給出了兩個基類:ExceptionLogger和ExceptionHandler,我們在使用ExceptionLogger基類時,他提供了ShouldLog虛方法,該方法在基類中被調用,其作用在于避免同一個異常被同一個ExceptionLogger實例重復記錄(如當后續的管道中該異常又被拋出,或者同一個ExceptionLogger對象不小心被注冊了兩次就會出現重復記錄的可能)我們也能復寫ShouldLog方法加入我們自己的異常記錄判斷邏輯以針對不同的場景進行不同的ExceptionLogger調用。如果有興趣可以反編譯一下ExceptionLogger基類看看,他使用了顯示接口實現,挺有意思的一個技巧。下面我們來看一個ExceptionLogger使用的例子:

public class ErroLogger : ExceptionLogger

{

public async Task LogAsync(ExceptionLoggerContext context, CancellationToken cancellationToken)

{

var sb = new StringBuilder();

//獲取Log組件

ILogger log = LogManager.GetCurrentClassLogger();

var request = context.Request;

sb.AppendLine("URL:");

//獲取URL

var url = request.RequestUri.ToString();

sb.AppendLine(url);

log.Error(context.Exception,sb.ToString(),"");

}

public override bool ShouldLog(ExceptionLoggerContext context)

{

return context.Exception is DemoException && base.ShouldLog(context);

}

}

在這里,我們重新寫了ShouldLog,就是為了保證ExceptionLogger只記錄DemoException這個類型的異常,而且他也調用了基類的方法不會重復記錄同一個異常。在LogAsync方法中,我通過Log組件記錄了導致異常的請求URL,也記錄了異常信息。

那接下來我們就是要開始對組件來注冊了:

在App_Start/WebApiConfig.cs文件中的Register方法中寫入

config.Services.Add(typeof(IExceptionLogger),new ErroLogger());

這樣,針對DemoException的異常記錄組件就完成了,當Web API執行管道中出現未處理的DemoException異常,均會調用則個組件進行記錄。

接下來我們來寫一個ExceptionHandler,在整個Web API框架中,ExceptionHandler只能提供一個實例,與ExceptionLogger一樣,我們可以繼承ExceptionHandler基類來簡化異常處理,在ExceptionHandler中也提供了ShouldHandle方法來判斷該異常是否應該處理,避免重復處理管道中其他環節重復拋出的異常。我們也同樣提供一個例子:

public class ErrorHandler : ExceptionHandler

{

public override async Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)

{

if (context.Exception is DemoException)

{

context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.BadRequest,new {Message=context.Exception.Message}));

}

else

{

context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.InternalServerError,new {Message = "服務器已被外星人綁架"}));

}

}

}

在這個例子中,我們判斷了異常的類型,并根據不同的異常返回客戶端不同的響應內容和不同的HTTP狀態碼。

然后在配置中注冊這個異常處理模塊,在App_Start/WebApiConfig.cs文件中的Register方法中寫入

config.Services.Replace(typeof(IExceptionHandler),new ErrorHandler());

這樣就替換了系統默認的ExceptionHandler,可以使用我們自定義的Handler進行異常的處理了。

在異常記錄、處理過程中,我們都碰到相應的異常上下文參數,我們能通過這個參數獲取當前請求的上下文,獲取請求、響應(小心有時會為空哦)、捕獲到該異常的catch塊信息等內容,我們可以利用這些信息更好地描述、記錄、處理異常。

到這里ExceptionLogger組件和ExceptionHandler組件簡單的開發就完成了。在開發的過程中我們可以看到,ExceptionLogger負責了全局的異常記錄,在Web API框架管道下出現未處理的異常ExceptionLogger都會進行捕獲、記錄。而ExceptionHandler和ExceptionFilter功能是有重疊的,那么問題來了,如何使用這兩個呢?下面讓你清楚的了解:

arm webapi

現在你是否已經get到這些小竅門,小方法了嗎,要多加練習,在出現異常時,要想到這些對于ExceptionHandler和ExceptionFilter而言,我覺得ExceptionHandler比ExceptionFilter更有優勢。

上一篇:分分鐘讓你了解嵌入式軟件系統的構成

下一篇:5個嵌入式系統的例子,都超級給力

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5,京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 好紧好湿太硬了我太爽了 | 欧美综合网站 | 大陆极品少妇内射AAAAAA | 久久97久久97精品免视看 | 亚洲精品国产摄像头 | 亚洲精品国偷拍自产在线观看 | 免费人成视频网站在线18 | 成人片段大有上在线观看 | 中国产xxxxa片在线观看 | 真人与拘做受免费视频播放 | 国产精品VA在线观看无码不卡 | 韩国三级大全久久网站 | 中国少妇videos露脸hd | 伊人狠狠色j香婷婷综合 | 未满十八18禁止午夜免费网站 | 成人中文字幕在线观看 | 三级三级久久三级久久18 | 亚洲成色A片77777在线麻豆 | 麻豆影视免费 | 欧美日韩精品一区二区在线视频 | 久久久久久无码精品人妻A片软件 | m麻豆传媒映画 | 亚洲色无码A片中文字幕 | 久久这里只有精品视频9 | 麻花豆传的最新一期内容是 | 免费观看国产美女裸体视频 | 中文字幕在线观看1 | 欧美日韩国产人妻无码 | 日韩av无码中文一区二区三区 | 狠狠躁夜夜躁人人爽天天天天 | 中国美女黄色一级片 | 日本人妻巨大乳挤奶水免费 | 总裁和秘书办公室激情h | 插我一区二区在线观看 | 天堂网资源中文最新版 | 亚洲AV无码国产精品永久一区 | 精品国产一区二区av麻豆 | 人妻无码久久精品人妻 | 日韩A级无码免费视频 | 亚洲欧美日韩综合久久久久 | 女人和拘做受大片免费看 |