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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Asp.NetCore依赖注入和管道方式的异常处理及日志记录

發布時間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.NetCore依赖注入和管道方式的异常处理及日志记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

????在業務系統,異常處理是所有開發人員必須面對的問題,在一定程度上,異常處理的能力反映出開發者對業務的駕馭水平;本章將著重介紹如何在 WebApi 程序中對異常進行捕獲,然后利用 Nlog 組件進行記錄;同時,還將介紹兩種不同的
異常捕獲方式:管道捕獲/服務過濾;通過本練習,將學習到如何捕獲異常、處理異常跳轉、記錄異常信息。

搭建框架

????首先,創建一個 WebApi 項目,選擇 Asp.Net Core Web 應用程序;

  • 進一步選擇 Api 模板,這里使用的 .netcore 版本為 2.1

  • 取消勾選 “啟用 Docker 支持(E)” 和 “為 Https 配置(C)”,點擊確定,得到一個完整的 WebApi 項目框架,如圖

  • 直接按 F5 運行項目,一切正常,程序啟動后進入默認路由調用,并輸出結果

異常路由

  • 一切看起來都非常正常和美好,但,禍之福所倚;接下來我們在 接口 Get() 中人為的制造一點麻煩。

? ? ? ?[HttpGet] ? ? ? ?public ActionResult<IEnumerable<string>> Get(){ ? ? ? ? ? ?throw new Exception("出錯了....."); ? ? ? ? ? ?return new string[] { "value1", "value2" };}
  • 這是由于項目配置了運行環境變量 ASPNETCORE_ENVIRONMENT=Development 后,Startup.cs 中配置了開發環境下,使用系統默認頁,所以我們才可以看到上面的異常信息

  • 如果你把環境變量設置為 ASPNETCORE_ENVIRONMENT=Production ,你會發現,在異常發生的時候,你得到了一個空白頁。

異常處理方式一:服務過濾

????在傳統的 Asp.Net MVC 應用程序中,我們一般都使用服務過濾的方式去捕獲和處理異常,這種方式非常常見,而且可用性來說,體驗也不錯,幸運的是 Asp.Net Core 也完整的支持該方式,接下來創建一個全局異常處理類 CustomerExceptionFilter


  • CustomerExceptionFilter 繼承自 IExceptionFilter 接口,并實現 void OnException(ExceptionContext context) 方法,在 CustomerExceptionFilter
    構造方法中,定義了兩個參數,用于記錄異常日志和獲取程序運行環境變量

  • 在接下來的 OnException 方法中,利用 environment 進行產品環境的判斷,并使用 logger 將日志寫入硬盤文件中,為了將日志寫入硬盤,
    需要引用 Nuget 包 NLog.Extensions.Logging/NLog.Web.AspNetCore ,并在 Startup.cs 文件的 Configure 方法中添加擴展

  • 上面的代碼讀取了配置文件 nlog.config 并設置為 NLog 的配置,該文件定義如下

<?xml version="1.0" encoding="utf-8" ?>

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="info">


? <!-- Load the ASP.NET Core plugin -->

? <extensions>

? ? <add assembly="NLog.Web.AspNetCore"/>

? </extensions>


? <!-- Layout: https://github.com/NLog/NLog/wiki/Layout%20Renderers -->

? <targets>

? ? <target xsi:type="File" name="errorfile" fileName="/data/logs/logfilter/error-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|? ${message} ${exception}|${aspnet-Request-Url}" />

? ? <target xsi:type="Null" name="blackhole" />

? </targets>


? <rules>

? ? <logger name="Microsoft.*" minlevel="Error" writeTo="blackhole" final="true" />

? ? <logger name="*" minlevel="Error" writeTo="errorfile" />

? </rules>

</nlog>

  • 為了在 WebApi 控制器中使用 CustomerExceptionFilter 過濾器,我們還需要在 Startup.cs 將 CustomerExceptionFilter 注入到容器中

  • 最后,在控制器 ValuesController 中應用該異常過濾器

  • 現在,按 F5 啟動程序,如預期所料,報錯信息被 CustomerExceptionFilter 捕獲,并轉換為 json 格式輸出

  • 同時,NLog 組件也將日志信息記錄到了硬盤中

異常處理方式二:中間件捕獲

????接下來利用 .NetCore 的管道模式,在中間件中對異常進行捕獲,首先,創建一個中間件

  • 代碼比較簡單,在管道中使用 try/catch 進行捕獲異常,創建 HandleException(HttpContext context, Exception e) 處理異常,判斷是 Development 環境下,輸出詳細的錯誤信息,非 Development 環境僅提示調用者“抱歉,出錯了”,同時使用 NLog 組件將日志寫入硬盤;
    同樣,在 Startup.cs 中將 ExceptionMiddleware 加入管道中

  • 一切就緒,按 F5 運行程序,網頁中輸出了期望中的 json 格式錯誤信息,同時 NLog 組件也將日志寫入了硬盤

結語

????在本例中,通過依賴注入和管道中間件的方式,演示了兩種不同的全局捕獲異常處理的過程;值得注意到是,兩種方式對于 NLog 的使用,都是一樣的,沒有任何差別,代碼無需改動;實際項目中,也是應當區分不同的業務場景,輸出不同的
日志信息,不管是從安全或者是用戶體驗友好性上面來說,都是非常值得推薦的方式,全局異常捕獲處理,完全和業務剝離。

  • 努力為開源社區作貢獻,推薦一個自己開發的基于 .netcore+pgsql 的快速開發腳手架,內置 ORM框架,github地址:https://github.com/lianggx/mystaging

  • 文中如有疏漏之處,歡迎指正。

  • 源碼下載:https://files.cnblogs.com/files/viter/Ron.LogFilter.zip


總結

以上是生活随笔為你收集整理的Asp.NetCore依赖注入和管道方式的异常处理及日志记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品欧美激情 | 欧美另类专区 | 中文字幕在线有码 | 国产理论视频 | 男人激烈吮乳吃奶爽文 | 日本xxxx高清 | 国产成人精品网 | 91夫妻论坛 | 亚洲天堂h| 在线观看一区视频 | 国产精品呻吟久久 | 欧美高清a| 依人在线| 九九精品影院 | 亚洲精品99| 自拍偷拍p | 免费一级suv好看的国产网站 | 丁香花免费高清完整在线播放 | 内地级a艳片高清免费播放 91在线精品一区二区 | 国产精品丝袜一区二区 | 一级黄色大全 | 国产手机在线观看 | 久久99精品国产.久久久久久 | 亚洲天堂三级 | 日韩免费福利视频 | 亚洲精品二区三区 | 成人激情久久 | 黄色网战入口 | 欧亚av| 精品中文一区二区三区 | 先锋影音制服丝袜 | 黄色一级生活片 | 中文字幕人妻精品一区 | 性福宝av | 亚洲黄v | 天天躁日日躁狠狠躁伊人 | 在线观看亚洲视频 | 五月婷婷亚洲 | 成人综合一区二区 | 欧美精品系列 | 男人天堂999 | 台湾佬美性中文娱乐 | 国产91页 | 精品无码国产污污污在线观看 | 午夜尤物| 国产日韩在线免费观看 | 图片区亚洲 | 日韩精品观看 | 在线观看涩涩 | 亚洲av永久一区二区三区蜜桃 | 在线观看色网站 | 天天爽天天爽夜夜爽毛片 | 九一爱爱 | 制中文字幕音影 | 日本男女激情视频 | 僵尸叔叔在线观看国语高清免费观看 | 成人国产精品久久 | 桃色一区二区三区 | 樱桃av | 六月丁香婷婷激情 | 五月婷婷丁香激情 | 性歌舞团一区二区三区视频 | 久草天堂| 国产精品久久久久久久久久免费看 | 91精品国产欧美一区二区成人 | 亚洲一区二区视频在线 | 亚洲综合色小说 | 日本一级黄色录像 | 日本精品免费在线观看 | 无码人妻久久一区二区三区 | 美国色视频 | 国产亚洲精品成人av久久ww | 日韩香蕉网 | 国产精品天天看 | 国产乱子伦精品无码码专区 | 一级黄色美女视频 | 国产一二区在线 | 人人爽人人射 | 日韩欧美视频在线 | 16—17女人毛片 | caopor在线 | 亚洲女人被黑人巨大进入 | 草草影院一区二区三区 | 一道本一区二区 | 九一在线观看免费高清视频 | 91视频在线视频 | 人人妻人人澡人人爽国产一区 | 亚洲最大福利 | 欧美日韩中文视频 | 一区二区三区伦理片 | 欧美做爰性生交视频 | 国产夜色视频 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久久午夜精品 | 久久久久久久久国产精品一区 | 国产精品午夜福利 | 国产美女www爽爽爽 www.国产毛片 | 久久一区欧美 | 国产性猛交╳xxx乱大交 |