亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#自定義HttpFilter模塊完善實例

2020-01-24 02:19:08
字體:
來源:轉載
供稿:網友

本文實例講述了C#自定義HttpFilter模塊完善的方法,分享給大家供大家參考。具體實現方法如下:

一、背景

近期由于要針對項目做用戶操作日志,但不想在每個方法里去增加代碼,寫入用戶日志。因為這樣具體的方法違背職責單一的原則,若后期日志內容格式發生變更,或其他什么需求,該方法代碼主要一變在變,故使用HttpModule模塊來完成此功能,感興趣的朋友可以參考:關于HttpHandler與HttpModule的理解和應用方法

經過實際運用與完善,現在可以再次總結下。

二、攔截時機

現在的版本中,攔截的依據是,在每次請求發生的過程中,攔截控制器類請求,重定向http輸出流,并分析出Controller與Action,接下來查找是否有方法監控了此控制器,若有,則分析出請求輸入參數,與此次請求輸出內容,存儲在FilterContext中,交給該方法,完成相應邏輯。

由于在最初的寫法中,是針對所有的請求進行流的重定向,在asmx下,會遇到問題,只要重定向了,調用服務的客戶端會提示400 Http Bad Request 。這個具體的錯誤原因,還不清楚,但正是由于該錯誤,讓我發現,我之前攔截的時機是錯誤的,理應放在請求之前,判斷是否滿足攔截的規則,若滿足,則重定向輸出流。

三、讀取用戶名

在Module模塊中總會出點問題,最后使用了Cookie記住用戶名,并直接定義為FilterContext一個屬性。解釋下這樣做的原因:由于記住用戶名的方式有很多,如Session、Cookie,即讀取用戶名的方式是可變的,所以盡可能將變化的內容在前面解決,這樣監聽控制器的方法,直接根據該屬性獲取用戶名,否則用戶名的讀取時機,放在每個監聽控制器模塊之后,讀取方式一旦發生變更,所有的模塊都要改變,當然也可以通過繼承一個base類來避免這么大的改變。

在這里我想表達的意思是:我們做類似底層庫的東西,盡可能穩定,將變化點集中在庫本身,這樣依賴該庫的應用才能穩定。若.net版本更新過程中,API都不穩定,想必我們也不會在去使用它。

四、應用之寫入日志

典型例子如下:

復制代碼 代碼如下:
[FilterMethod("Login", "Login")]
public void Login(FilterContext context)
{
    //解析輸出內容,這里針對要監聽的控制器和方法來寫的
    var arr = context.OutputBody.Split('|');
    var log = string.Format("userName:{0} password:{1}",arr);
    FilterLog.Log.Info(log);
}

該方法表達的意思是,監控LoginController的Login方法。由于我們需要分析請求輸出結果,所以分析的規則,與控制器是強依賴的,控制器的方法是怎么返回數據的,我們此處就要根據規則解析。我在項目中使用的是Json,所以監控的地方都需要Json的反序列化,這里僅僅是一個Demo。

另外一個方法可以監聽一個控制器下的多個方法,或者多個控制器。這樣是旨在解決有很多Action,輸入參數和輸出參數都是相同的,可能由于業務不同,僅僅在方法名和內部實現中有不同。

五、應用之更新緩存

首先關于Cache的應用,可以讀下此文章,Asp.Net Cache高級用法。

由于此處我沒有寫例子,先描述我在項目中運用的情況。系統有很多數據字典,在請求該數據字典時,程序首先從數據庫加載字典數據,并放入緩存,此時放入緩存有個技巧,設置過期時間,并設置移除緩存前的回調,我們來看看具體的方法定義:

復制代碼 代碼如下:
//
// 摘要:
//     將對象與依賴項、到期策略以及可用于在從緩存中移除項之前通知應用程序的委托一起插入到 System.Web.Caching.Cache 對象中。
//
// 參數:
//   key:
//     用于引用對象的緩存鍵。
//
//   value:
//     要插入到緩存中的對象。
//
//   dependencies:
//     該項的文件依賴項或緩存鍵依賴項。當任何依賴項更改時,該對象即無效,并從緩存中移除。如果沒有依賴項,則此參數包含 null。
//
//   absoluteExpiration:
//     所插入對象將到期并被從緩存中移除的時間。要避免可能的本地時間問題(例如從標準時間改為夏時制),請使用 System.DateTime.UtcNow
//     而不是 System.DateTime.Now 作為此參數值。如果使用絕對到期,則 slidingExpiration 參數必須設置為 System.Web.Caching.Cache.NoSlidingExpiration。
//
//   slidingExpiration:
//     緩存對象的上次訪問時間和對象的到期時間之間的時間間隔。如果該值等效于 20 分鐘,則對象在最后一次被訪問 20 分鐘之后將到期并被從緩存中移除。如果使用可調到期,則
//     absoluteExpiration 參數必須設置為 System.Web.Caching.Cache.NoAbsoluteExpiration。
//
//   onUpdateCallback:
//     從緩存中移除對象之前將調用的委托??梢允褂盟鼇砀戮彺骓棽⒋_保緩存項不會從緩存中移除。
//
// 異常:
//   System.ArgumentNullException:
//     key、value 或 onUpdateCallback 參數為 null。
//
//   System.ArgumentOutOfRangeException:
//     將 slidingExpiration 參數設置為小于 TimeSpan.Zero 或大于一年的等效值。
//
//   System.ArgumentException:
//     為要添加到 Cache 中的項設置 absoluteExpiration 和 slidingExpiration 參數。- 或 -dependencies
//     參數為 null,absoluteExpiration 參數設置為 System.Web.Caching.Cache.NoAbsoluteExpiration
//     并且 slidingExpiration 參數設置為 System.Web.Caching.Cache.NoSlidingExpiration。
public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemUpdateCallback onUpdateCallback);

仔細看看onUpdateCallback參數的描述:從緩存中移除對象之前將調用的委托??梢允褂盟鼇砀戮彺骓棽⒋_保緩存項不會從緩存中移除。

我在把數據字典放入緩存的同時傳遞讀取緩存的委托,這樣在主動移除緩存或者緩存過期時都將再次調用此委托,將數據字典再次放入緩存。所以一旦數據字典發生了變更,如增刪改,那么就主動將字典緩存移除,它就可以自動更新過來,是不是很方便呢。

區別于寫操作日志,不過是處理邏輯發生了變化,他們都需要請求的輸入和輸出。

六、其他

1.由于使用HttpModule來完成此功能,如需正常運行,需要在WebConfig中注冊該模塊。詳見Demo。

2.項目中使用了Log4Net記錄文本日志,并可以根據功能分類。詳見:Log4Net日志分類維護。

完整實例代碼點擊此處本站下載

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕欧美专区| 日韩电影中文字幕| 91精品国产综合久久久久久久久| 国产日韩欧美视频| 亚洲韩国日本中文字幕| 色综合影院在线| 日韩成人黄色av| 中文国产成人精品| 91嫩草在线视频| 77777亚洲午夜久久多人| 青青久久av北条麻妃黑人| 欧美大尺度激情区在线播放| 亚洲人精品午夜在线观看| 日日骚av一区| 国产精品第七十二页| 日韩美女毛茸茸| 日韩精品有码在线观看| 国产脚交av在线一区二区| 日韩高清av在线| 久久99久久久久久久噜噜| 欧美性xxxx极品hd欧美风情| 国产亚洲精品久久久久久777| 国产成人免费91av在线| 亚洲国产成人爱av在线播放| 88xx成人精品| 欧美精品在线视频观看| 午夜精品久久17c| 91地址最新发布| 日韩在线免费视频| 亚洲成人在线网| 91九色国产在线| 亚洲国产中文字幕在线观看| 91免费精品国偷自产在线| 久久亚洲综合国产精品99麻豆精品福利| 精品久久久中文| 日韩免费观看av| 欧美日韩亚洲精品一区二区三区| 亚洲丝袜av一区| 日韩在线中文视频| 日韩视频精品在线| 永久555www成人免费| 孩xxxx性bbbb欧美| 国产福利精品av综合导导航| 韩国国内大量揄拍精品视频| 欧美夫妻性生活xx| 91亚洲精华国产精华| 亚洲欧美日本伦理| 日韩欧美在线国产| 亚洲精品99999| 欧美俄罗斯乱妇| 国产亚洲精品久久久久久777| 久久久成人的性感天堂| 高跟丝袜一区二区三区| 欧美在线不卡区| 日韩av一卡二卡| www.国产精品一二区| 亚洲国产中文字幕久久网| 国产精品久久久久秋霞鲁丝| 日韩精品视频免费专区在线播放| 热久久视久久精品18亚洲精品| 欧美一级在线亚洲天堂| 国产一区二区三区在线看| 国产成人一区二区三区电影| 北条麻妃在线一区二区| 亚洲国产精品99久久| 欧美精品九九久久| 久久精视频免费在线久久完整在线看| 国产视频欧美视频| 97视频免费观看| 黑人精品xxx一区一二区| 国产成人亚洲综合| 欧美黑人性生活视频| 国色天香2019中文字幕在线观看| 亚洲最大福利视频网| 亚洲美女黄色片| 最新国产精品亚洲| 精品国产欧美一区二区三区成人| 成人黄色生活片| 91性高湖久久久久久久久_久久99| 久热精品视频在线观看| 精品福利免费观看| 亚洲精品欧美日韩| 欧美性生交xxxxx久久久| 亚洲一区二区三区乱码aⅴ| 欧美在线播放视频| 日韩欧美亚洲一二三区| www.欧美视频| 国产亚洲精品91在线| 啊v视频在线一区二区三区| 久久精品成人一区二区三区| 5566日本婷婷色中文字幕97| 欧美激情小视频| 欧美丝袜一区二区三区| 91免费视频国产| 91在线精品播放| 久久国产精品久久久久久久久久| 国外日韩电影在线观看| 黑人巨大精品欧美一区二区一视频| 色青青草原桃花久久综合| 欧美激情精品久久久久久变态| 精品久久久久久久久久国产| 亚洲自拍小视频免费观看| 26uuu另类亚洲欧美日本一| 日韩经典中文字幕| 国产自摸综合网| 波霸ol色综合久久| 91tv亚洲精品香蕉国产一区7ujn| 欧美激情国产日韩精品一区18| 九九久久久久99精品| 欧美激情va永久在线播放| 国产日韩视频在线观看| 国产精品电影在线观看| 亚洲人永久免费| 欧美大尺度在线观看| 欧美黑人一级爽快片淫片高清| 欧美黄色免费网站| 国产精品xxx视频| 色偷偷噜噜噜亚洲男人| 久久成年人免费电影| 91高清免费在线观看| 日韩一区二区三区在线播放| 奇米四色中文综合久久| 欧美日韩在线一区| 久久久国产精品亚洲一区| 欧美福利视频网站| 欧美一区二区视频97| 在线看片第一页欧美| 国产丝袜一区视频在线观看| 91久久久国产精品| 日韩av中文在线| 成人黄色av播放免费| 国产大片精品免费永久看nba| 久久精品免费播放| 美女视频久久黄| 精品久久中文字幕久久av| 青青草精品毛片| 欧美疯狂xxxx大交乱88av| 最近2019免费中文字幕视频三| 亚洲精品www久久久| 国产精品香蕉av| 色爱精品视频一区| 97精品国产97久久久久久| 久久福利视频网| 精品国产一区久久久| 中文字幕av一区| 国产精品久久久久久av福利| 国产成人精品久久亚洲高清不卡| 国色天香2019中文字幕在线观看| 国产精品免费观看在线| 91精品国产99| 亚洲精品国产电影| 亚洲视频免费一区| 亚洲а∨天堂久久精品9966| 韩国19禁主播vip福利视频| 91成品人片a无限观看| 久久精品国产免费观看| 日韩成人av在线播放| 日韩资源在线观看| 久久97久久97精品免视看| 久久精品国产久精国产思思| 欧美另类在线播放| 成人激情视频网| 日韩欧美亚洲国产一区| 欧美激情videoshd|