網站首頁 編程語言 正文
背景
因為在上篇演示Action Filter
的時候可能是因為舉的例子不夠好,有小伙伴在評論區指出.NET 6
新增加的特性可以實現在視圖模型綁定之前允許記錄Http請求日志的組件:HttpLogging
。這個組件我之前試過,而Action Filter
與其用來記錄日志,更不如說是為Http請求的接收和響應提供了中間可以修改的機會。
本著讓更多的人了解新知識的出發點,這次我們臨時把這個主題加進來。
什么是HttpLogging?
-
HttpLogging
是.NET 6
新加入的一個框架內置的中間件 - 它允許記錄HTTP請求和響應,可以提供以下信息的日志:
- HTTP請求信息;
- 普通屬性;
- Header信息;
- Body信息;
- HTTP響應信息。
什么時候可以考慮使用HttpLogging?
當你需要記錄HTTP請求和響應的信息或者部分信息時。
而當你使用它時,又需要注意什么?
- 性能
當你決定使用HttpLogging
來記錄請求信息尤其是Body信息時,需要仔細考慮僅記錄必要的字段。當你不確定它會不會對你的程序有性能影響時,你需要進行性能測試。 - 隱私
相比于性能,更容易被我們開發忽略掉的一點(而且是更加重要的一點)是:我們有沒有在日志中泄露一些個人隱私數據(Personally Identifiable Information, PII)? 敏感數據不應該直接被記錄到日志中,至少是需要經過加密或者混淆的。
怎么用
這個中間件的用法非常簡單,兩個方法,六個可以配置的選項:
引入中間件
在Program.cs
的 app.MapControllers();
之前添加中間件:
Program.cs
// 省略其他 app.UseHttpLogging(); app.MapControllers();
當我們使用默認配置的時候,來隨便找一個接口看一下效果:
- 請求日志
- 響應日志
所有默認配置下不記錄日志的字段都以[Redacted]
代替,下面我們可以更改默認配置以顯示更多內容:
配置服務
Program.cs
// 省略其他... builder.Services.AddControllers(); builder.Services.AddHttpLogging(options => { // 日志記錄的字段配置,可以以 | 連接 options.LoggingFields = HttpLoggingFields.All; // 增加請求頭字段記錄 options.RequestHeaders.Add("Sec-Fetch-Site"); options.RequestHeaders.Add("Sec-Fetch-Mode"); options.RequestHeaders.Add("Sec-Fetch-Dest"); // 增加響應頭字段記錄 options.ResponseHeaders.Add("Server"); // 增加請求的媒體類型 options.MediaTypeOptions.AddText("application/javascript"); // 配置請求體日志最大長度 options.RequestBodyLogLimit = 4096; // 配置響應體日志最大長度 options.ResponseBodyLogLimit = 4096; });
同樣的請求我們再來看看效果:
- 請求日志,注意紅框標記的信息現在已經顯示了
- 響應日志
總結
可以看到,這個中間件使用起來是比較簡單的。
參考資料
原文鏈接:https://www.cnblogs.com/code4nothing/p/build-todolist-12-1.html
相關推薦
- 2021-12-13 基于C#實現端口掃描器(單線程和多線程)_C#教程
- 2022-07-24 Python實現FIFO緩存置換算法_python
- 2022-11-07 CLion開發stm32?使用DSP庫的操作方法_C 語言
- 2022-01-03 CSS字體屬性之復合屬性
- 2022-09-01 PgSQL條件語句與循環語句示例代碼詳解_PostgreSQL
- 2022-05-25 Shell腳本獲取jar包pid進行重啟、停止、啟動
- 2024-01-28 手把手教你使用git上傳文件到倉庫
- 2022-12-05 Linux中的grep?-v、-e、-E用法小結_linux shell
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支