.NET?6開發(fā)TodoList應(yīng)用之請求日志組件HttpLogging介紹
背景
因?yàn)樵谏掀菔?code>Action Filter的時(shí)候可能是因?yàn)榕e的例子不夠好,有小伙伴在評論區(qū)指出.NET 6新增加的特性可以實(shí)現(xiàn)在視圖模型綁定之前允許記錄Http請求日志的組件:HttpLogging。這個(gè)組件我之前試過,而Action Filter與其用來記錄日志,更不如說是為Http請求的接收和響應(yīng)提供了中間可以修改的機(jī)會(huì)。
本著讓更多的人了解新知識(shí)的出發(fā)點(diǎn),這次我們臨時(shí)把這個(gè)主題加進(jìn)來。
什么是HttpLogging?
HttpLogging是.NET 6新加入的一個(gè)框架內(nèi)置的中間件- 它允許記錄HTTP請求和響應(yīng),可以提供以下信息的日志:
- HTTP請求信息;
- 普通屬性;
- Header信息;
- Body信息;
- HTTP響應(yīng)信息。
什么時(shí)候可以考慮使用HttpLogging?
當(dāng)你需要記錄HTTP請求和響應(yīng)的信息或者部分信息時(shí)。
而當(dāng)你使用它時(shí),又需要注意什么?
- 性能
當(dāng)你決定使用HttpLogging來記錄請求信息尤其是Body信息時(shí),需要仔細(xì)考慮僅記錄必要的字段。當(dāng)你不確定它會(huì)不會(huì)對你的程序有性能影響時(shí),你需要進(jìn)行性能測試。 - 隱私
相比于性能,更容易被我們開發(fā)忽略掉的一點(diǎn)(而且是更加重要的一點(diǎn))是:我們有沒有在日志中泄露一些個(gè)人隱私數(shù)據(jù)(Personally Identifiable Information, PII)? 敏感數(shù)據(jù)不應(yīng)該直接被記錄到日志中,至少是需要經(jīng)過加密或者混淆的。
怎么用
這個(gè)中間件的用法非常簡單,兩個(gè)方法,六個(gè)可以配置的選項(xiàng):
引入中間件
在Program.cs 的 app.MapControllers();之前添加中間件:
Program.cs
// 省略其他 app.UseHttpLogging(); app.MapControllers();
當(dāng)我們使用默認(rèn)配置的時(shí)候,來隨便找一個(gè)接口看一下效果:
- 請求日志

- 響應(yīng)日志

所有默認(rèn)配置下不記錄日志的字段都以[Redacted]代替,下面我們可以更改默認(rèn)配置以顯示更多內(nèi)容:
配置服務(wù)
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");
// 增加響應(yīng)頭字段記錄
options.ResponseHeaders.Add("Server");
// 增加請求的媒體類型
options.MediaTypeOptions.AddText("application/javascript");
// 配置請求體日志最大長度
options.RequestBodyLogLimit = 4096;
// 配置響應(yīng)體日志最大長度
options.ResponseBodyLogLimit = 4096;
});同樣的請求我們再來看看效果:
- 請求日志,注意紅框標(biāo)記的信息現(xiàn)在已經(jīng)顯示了

- 響應(yīng)日志

總結(jié)
可以看到,這個(gè)中間件使用起來是比較簡單的。
參考資料
到此這篇關(guān)于.NET 6開發(fā)TodoList應(yīng)用之請求日志組件HttpLogging介紹的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET MVC中將控制器分離到類庫的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET MVC中將控制器分離到類庫的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2015-06-06
c#.net 動(dòng)態(tài)讀取 走馬燈代碼實(shí)例分享
c#.net 動(dòng)態(tài)讀取 走馬燈代碼實(shí)例分享,需要的朋友可以參考一下2013-06-06
ASP.NET性能優(yōu)化小結(jié)(ASP.NET&C#)
ASP.NET性能優(yōu)化,提高頁面的執(zhí)行效率與下載速度,等很多需要考慮的細(xì)節(jié),編程人員值得參考下。2011-01-01
剖析Asp.Net路由系統(tǒng)實(shí)現(xiàn)原理
本篇文章主要介紹了剖析Asp.Net路由系統(tǒng)實(shí)現(xiàn)原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
.Net?Core應(yīng)用增強(qiáng)型跨平臺(tái)串口類庫CustomSerialPort()詳解
本文詳細(xì)講解了.Net?Core應(yīng)用增強(qiáng)型跨平臺(tái)串口類庫CustomSerialPort(),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
.NET使用YARP根據(jù)域名轉(zhuǎn)發(fā)實(shí)現(xiàn)反向代理
這篇文章介紹了.NET使用YARP根據(jù)域名轉(zhuǎn)發(fā)實(shí)現(xiàn)反向代理的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
輕量級(jí)ORM框架Dapper應(yīng)用之實(shí)現(xiàn)Join操作
本文詳細(xì)講解了使用Dapper實(shí)現(xiàn)Join操作,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03

