引言 上半年使用的thinkjs開發的node項目有一個優點就是所有請求都會有日誌記錄在控制台輸出,裡面包含了請求地址以及耗時。我就希望在.net中也可以實現這樣子的功能,正好想到了中間件,所以就用中間件來實現該功能。 實現 該功能主要分為兩部分:一個是IApplicationBuilder的拓展實 ...
引言
上半年使用的thinkjs開發的node項目有一個優點就是所有請求都會有日誌記錄在控制台輸出,裡面包含了請求地址以及耗時。我就希望在.net中也可以實現這樣子的功能,正好想到了中間件,所以就用中間件來實現該功能。
實現
該功能主要分為兩部分:一個是IApplicationBuilder的拓展實現,一個是中間件的功能實現
拓展實現也是我今天在弄懂的一個東西,之前一直很好奇,別人是怎麼讓String類可以拓展方法的。
拓展方法實現代碼如下:
UseRequestRecord方法中的app參數的類別是IApplicationBuilder就意味著這個方法是IApplicationBuilder類別的拓展方法(this不能漏了)。
該拓展方法主要是調用了RequestRecordMiddleware這個中間件(num是我測試的傳值)
中間件方法代碼實現如下:
中間件的功能內容都是寫在InvokeAsync方法中的(好像可以去除Async改為同步的方法)。需要註意的就是中間件的洋蔥模型,所以計時器的開始和結束分別在_next調用Invoke方法的前後。最後效果如下: