精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HttpContext.Current并非無處不在

開發 后端
由于ASP.NET提供了靜態屬性HttpContext.Current,因此獲取HttpContext對象就非常方便了。也正是因為這個原因,所以我們經常能見到直接訪問HttpContext.Current的代碼

了解ASP.NET的開發人員都知道它有個非常強大的對象 HttpContext,而且為了方便,ASP.NET還為它提供了一個靜態屬性HttpContext.Current來訪問它,今天的博客打算就從HttpContext.Current說起。

無處不在的HttpContext

由于ASP.NET提供了靜態屬性HttpContext.Current,因此獲取HttpContext對象就非常方便了。也正是因為這個原因,所以我們經常能見到直接訪問HttpContext.Current的代碼:

  1. public class Class1  
  2. {  
  3.     public Class1()  
  4.     {  
  5.         string file = HttpContext.Current.Request.MapPath("~/App_Data/xxxxxx.xml");  
  6.  
  7.         string text = System.IO.File.ReadAllText(file);  
  8.  
  9.         //..........其它的操作  
  10.     }  
  11.  
  12.     // 或者在一些方法中直接使用HttpContext.Current  
  13.     public void XXXXX()  
  14.     {  
  15.         string url = HttpContext.Current.Request.RawUrl;  
  16.  
  17.         string username = HttpContext.Current.Session["username"].ToString();  
  18.  
  19.         string value = (string)HttpContext.Current.Items["key"];  
  20.     }  
  21.  
  22.     // 甚至還設計成靜態屬性  
  23.     public static string XXX  
  24.     {  
  25.         get 
  26.         {  
  27.             return (string)HttpContext.Current.Items["XXX"];  
  28.         }  
  29.     }  
  30. }  

這樣的代碼,經常能在類庫項目中看到,由此可見其泛濫程度。

難道這些代碼真的沒有問題嗎?

有人估計會說:我寫的代碼是給ASP.NET程序使用的,又不是給控制臺程序使用,所以沒有問題。

真的是這樣嗎?

HttpContext.Current到底保存在哪里?

的確,在一個ASP.NET程序中,幾乎任何時候,我們都可以訪問HttpContext.Current得到一個HttpContext對象,然而,您有沒有想過它是如何實現的呢?

如果您沒有想過這個事情,那我今天就來告訴您吧。請看下面的代碼

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     HttpContext context1 = HttpContext.Current;  
  4.  
  5.     HttpContext context2 = System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext;  
  6.  
  7.     bool isEqual = object.ReferenceEquals(context1, context2);  
  8.  
  9.     Response.Write(isEqual);  
  10. }  

猜猜會顯示什么? 

這就是我看到的結果,不信的話您也可以試試。

從這段代碼來看,HttpContext其實是保存在CallContext.HostContext這個屬性中,如果您還對HostContext感到好奇的話,您可以自己用Reflector.exe去看,我不想再貼代碼了,因為有些類型和方法并不是公開的。

我們還是來看看MSDN是如何解釋CallContext.HostContext的吧:

獲取或設置與當前線程相關聯的主機上下文。

這個解釋非常含糊,不過有二個關鍵詞我們可以記下來:【當前線程】,【關聯】。

是說:和當前線程相關聯的某個東西嗎?

我是這樣理解的。

我們在一個ASP.NET程序中,為什么可以到處訪問HttpContext.Current呢?

因為ASP.NET會為每個請求分配一個線程,這個線程會執行我們的代碼來生成響應結果,即使我們的代碼散落在不同的地方(類庫),線程仍然會執行它們,所以,我們可以在任何地方訪問HttpContext.Current獲取到與【當前請求】相關的HttpContext對象,畢竟這些代碼是由同一個線程來執行的嘛,所以得到的HttpContext引用也就是我們期待的那個與請求相關的對象。

因此,將HttpContext.Current設計成與【當前線程】相關聯是合適的。

HttpContext并非無處不在!

【當前線程】是個什么意思? 我為什么要突出這個詞呢?

答:

1. 當前線程是指與【當前請求】相關的線程。

2. 在ASP.NET中,有些線程并非總是與請求相關。

感覺有點繞口嗎? 不容易理解嗎? 還是繼續往下看吧。

雖然在ASP.NET程序中,幾乎所有的線程都應該是為響應請求而運行的,

但是,還有一些線程卻不是為了響應請求而運行,例如:

1. 定時器的回調。

2. Cache的移除通知。

3. APM模式下異步完成回調。

4. 主動創建線程或者將任務交給線程池來執行。

在以上這些情況中,如果線程執行到HttpContext.Current,您認為會返回什么?

還是一個HttpContext的實例引用嗎?

如何是,那它與哪個請求關聯?

顯然,在1,2二種情況中,訪問HttpContext.Current將會返回 null 。

因為很有可能任務在運行時根本沒有任何請求發生。了解異步的人應該能很容易理解第3種情況(就當是個結論吧)

第4種情況就更不需要解釋了,因為確實不是當前線程。

既然是這樣,那我們再看一下本文開頭的一段代碼:

  1. public Class1()  
  2. {  
  3.     string file = HttpContext.Current.Request.MapPath("~/App_Data/xxxxxx.xml");  
  4.  
  5.     string text = System.IO.File.ReadAllText(file);  
  6.  
  7.     //..........其它的操作  

想像一下:如果Class1是在定時器回調或者Cache的移除通知時被創建的,您認為它還能正常運行嗎?

此刻您心里應該有答案了吧?

可能您會想:為什么我在其它任何地方又可以訪問HttpContext.Current得到HttpContext引用呢?

答:那是因為ASP.NET在調用您的代碼前,已經將HttpContext設置到前面所說的CallContext.HostContext屬性中。

HttpApplication有個內部方法OnThreadEnter(),ASP.NET在調用外部代碼前會調用這個方法來切換HttpContext,例如:每當執行管線的事件處理器之前,或者同步上下文(AspNetSynchronizationContext)執行回調時。切換線程的CallContext.HostContext屬性之后,我們的代碼就可以訪問到HttpContext引用。注意:HttpContext的引用其實是保存在HttpApplication對象中。

有時候我們會見到【ASP.NET線程】這個詞,今天正好來說說我對這個詞的理解:當前線程是與一個HttpContext相關的線程,由于線程與HttpContext相關聯,也就意味著它正在處理發送給ASP.NET的請求。注意:這個線程仍然是線程池的線程。

如何獲取文件絕對路徑?

在定時器回調或者Cache的移除通知中,有時確實需要訪問文件,然而對于開發人員來說,他們并不知道網站會被部署在哪個目錄下,因此不可能寫出絕對路徑,他們只知道相對于網站根目錄的相對路徑,為了定位文件路徑,只能調用HttpContext.Current.Request.MapPath或者 HttpContext.Current.Server.MapPath來獲取文件的絕對路徑。如果HttpContext.Current返回了null,那該如何如何訪問文件?

其實方法并非MapPath一種,我們可以訪問HttpRuntime.AppDomainAppPath獲取網站的路徑,然后再拼接文件的相對路徑即可:

看到沒:圖片中HttpContext.Current顯示的是 null ,所以您要是再調用MapPath,就必死無疑!

在此我也奉勸大家一句:盡量不要用MapPath,HttpRuntime.AppDomainAppPath才是更安全的選擇。

異步調用中如何訪問HttpContext?

前面我還提到在APM模式下的異步完成回調時,訪問HttpContext.Current也會返回null,那么此時該怎么辦呢?

答案有二種:

1. 在類型中添加一個字段來保存HttpContext的引用(異步開始前)。

2. 將HttpContext賦值給BeginXXX方法的最后一個參數(object state)

建議優先選擇第二種方法,因為可以防止以后他人維護時數據成員被意外使用。

安全地使用HttpContext.Current

有時我們會寫些通用類庫給ASP.NET或者WindowsService程序來使用,例如異常記錄的工具方法。對于ASP.NET程序來說,我們肯定希望在異常發生時,能記錄URL,表單值,Cookie等等數據,便于事后分析。然而對于WindowsService這類程序來說,您肯定沒想過要記錄Cookie吧?那么如何實現一個通用的功能呢?

方法其實也簡單,就是要判斷HttpContext.Current是否返回null,例如下面的示例代碼:

  1. public static void LogException(Exception ex)  
  2. {  
  3.     StringBuilder sb = new StringBuilder();  
  4.     sb.Append("異常發生時間:").AppendLine(DateTime.Now.ToString());  
  5.     sb.AppendLine(ex.ToString());  
  6.  
  7.     // 如果是ASP.NET程序,還需要記錄URL,FORM, COOKIE之類的數據  
  8.     HttpContext context = HttpContext.Current;  
  9.     if( context != null ) {  
  10.         // 能運行到這里,就肯定是在處理ASP.NET請求,我們可以放心地訪問Request的所有數據  
  11.         sb.AppendLine("Url:" + context.Request.RawUrl);  
  12.  
  13.         // 還有記錄什么數據,您自己來實現吧。  
  14.     }  
  15.  
  16.     System.IO.File.AppendAllText("日志文件路徑", sb.ToString());  
  17. }  

就是一個判斷,解決了所有問題,所以請忘記下面這類不安全的寫法吧:

  1. HttpContext.Current.Request.RawUrl;  
  2. HttpContext.Current.Server.MapPath("xxxxxx"); 

下面的方法才是安全的:

  1. HttpContext context = HttpContext.Current;  
  2. if( context != null ) {  
  3.     // 在這里訪問與請求有關的東西。  
  4. }  

原文鏈接:http://www.cnblogs.com/fish-li/archive/2013/04/06/3002940.html

責任編輯:張偉 來源: 博客園
相關推薦

2017-12-29 10:54:01

Python編程語言系統管理工具

2022-09-16 10:44:17

物聯網通信網絡

2017-09-14 18:02:53

傷害學神挑戰

2014-04-23 13:08:04

Dockerlinux

2024-06-03 17:24:34

2013-11-11 15:04:52

2021-10-29 15:30:37

SASE/網絡安全

2013-12-30 10:05:54

Linux操作系統

2023-08-18 14:39:52

5G4G

2015-01-08 15:31:22

CES2015智能硬件HomeKit

2009-03-30 11:58:03

2021-10-29 15:05:57

網絡安全爬蟲技術

2011-08-25 13:45:31

應用交付F5John McAdam

2011-07-05 10:41:17

webOS

2010-06-03 15:38:30

2021-02-18 16:41:26

大數據疫情物聯網

2013-06-09 09:32:24

PC云計算

2010-11-07 21:27:38

2017-10-13 16:17:39

2014-07-31 10:30:43

點贊
收藏

51CTO技術棧公眾號

欧美高清激情brazzers| 久久亚洲精品小早川怜子| 超在线视频97| 中国极品少妇xxxx| 不卡福利视频| 亚洲欧洲三级电影| 久久99精品久久久久久久青青日本| 高潮毛片又色又爽免费| 亚洲精品电影| 亚洲美女性视频| 搡的我好爽在线观看免费视频| 高清毛片在线观看| 最新国产の精品合集bt伙计| 精品国产一区二区三| 艳妇乳肉豪妇荡乳av| 亚洲精品免费观看| 久热99视频在线观看| 久久精品综合视频| 日韩视频一二区| 欧美视频精品在线| 国产免费毛卡片| 欧美hdxxxxx| 国产精品久久久久久久蜜臀| 激情小说综合网| 国产原创中文av| 肉色丝袜一区二区| 91精品成人久久| 午夜写真片福利电影网| 欧美韩国日本在线观看| 日韩成人小视频| av地址在线观看| 成人污版视频| 欧美日韩精品电影| 免费国产成人av| 老司机深夜福利在线观看| 亚洲精品成人悠悠色影视| 亚洲不卡一卡2卡三卡4卡5卡精品| 国产成人av免费看| 看片的网站亚洲| 国产精品视频免费观看www| 69视频免费在线观看| 狠狠爱综合网| 九九热精品在线| 国产性生活大片| 日韩av二区| 正在播放欧美视频| av女人的天堂| 精品国内自产拍在线观看视频| 亚洲国产精品国自产拍av秋霞| 欧美熟妇精品一区二区| 视频精品一区二区三区| 欧美一区二区在线不卡| 又色又爽又黄视频| 亚洲国产aⅴ精品一区二区三区| 欧美午夜精品一区| 天天干天天综合| 狂野欧美性猛交xxxx| 欧美日韩成人一区二区| 午夜免费看毛片| 日韩午夜电影免费看| 欧美乱熟臀69xxxxxx| 欧美日韩精品区别| 激情视频亚洲| 精品国产网站在线观看| 国产a级黄色片| 亚洲黄色录像| 国产一区二区三区在线观看视频| 夜夜春很很躁夜夜躁| 欧美日一区二区| 久久激情视频久久| 九九热精彩视频| 国产偷自视频区视频一区二区| 欧美亚洲一区在线| 中文字幕在线观看第二页| 久久av中文字幕片| 91在线视频九色| 欧美一区二区三区激情| 久久先锋资源网| 亚洲欧洲一区二区福利| 国产区在线观看| 亚洲第一主播视频| 青青青国产在线视频| 日韩欧乱色一区二区三区在线 | 香蕉视频一区| 国产一区二区三区丝袜| 国产精品 欧美激情| 在线免费观看欧美| 国产精品入口免费视频一| 国产乱码精品一区二三区蜜臂| 国产精品一卡二| 久久精品欧美| 动漫一区在线| 欧美日韩综合视频| 久久久精品高清| 色橹橹欧美在线观看视频高清| 在线免费观看羞羞视频一区二区| a级片在线观看免费| 久久久水蜜桃av免费网站| 91精品久久久久久久久久入口 | 欧美在线一级| 亚洲国产欧美自拍| 日韩精品久久久免费观看| 午夜激情在线观看| 午夜精品在线视频一区| 日本激情视频在线播放| 丁香五月缴情综合网| 在线视频欧美性高潮| 国产福利久久久| 麻豆一区二区三| 免费99视频| 日本天码aⅴ片在线电影网站| 91官网在线免费观看| 亚洲高清无码久久| 一个色综合网| 国产精品老牛影院在线观看| 色噜噜在线播放| 亚洲精品高清在线观看| 色播五月激情五月| 久操成人av| 91精品国产电影| 刘玥91精选国产在线观看| 亚洲天堂av老司机| 午夜dv内射一区二区| 欧美日韩一区二区三区四区不卡| 久久成年人视频| 伊人免费在线观看高清版| 91视频精品在这里| 热99这里只有精品| jazzjazz国产精品久久| 欧美猛男性生活免费| 97超碰资源站| 国产精品久久久久永久免费观看| caopor在线视频| 亚洲精品一级二级三级| 国模私拍一区二区三区| 亚洲国产成人在线观看| 亚洲日本在线视频观看| 日韩在线一区视频| 亚洲色图插插| 91精品久久久久久久久久入口| www.黄在线观看| 欧美性受xxxx黑人xyx| 久久成人激情视频| 玖玖视频精品| 日韩亚洲视频| 欧美日韩女优| 日韩亚洲国产中文字幕| 又骚又黄的视频| 国产精品高潮久久久久无| 一路向西2在线观看| 久久五月天小说| 91精品国产自产在线| 免费a级毛片在线播放| 91精品一区二区三区在线观看| 欧美性生给视频| 国产美女在线观看一区| 成人手机在线播放| 凹凸成人在线| 4438全国成人免费| 精品美女视频在线观看免费软件| 91久久一区二区| 欧美巨胸大乳hitomi| 久久精品国产精品青草| 日本丰满少妇黄大片在线观看| 日韩视频一二区| 韩国日本不卡在线| 久久久久久青草| 欧美日韩精品一区二区天天拍小说 | 国产香蕉久久精品综合网| 最新天堂中文在线| 一区二区三区四区电影| 国产免费一区二区三区| gay欧美网站| 日韩日本欧美亚洲| 亚洲精品一区二区三区蜜桃| 狠狠躁夜夜躁人人躁婷婷91| 黄色aaa视频| 精品在线免费观看| 男人的天堂狠狠干| 欧美日韩国产传媒| y111111国产精品久久婷婷| 韩国精品一区| 日韩少妇与小伙激情| 欧美天堂在线视频| 在线免费观看日本欧美| 免费中文字幕在线| 91免费看`日韩一区二区| 天天色综合天天色| 红桃视频国产精品| 日韩影院一区| 狠狠一区二区三区| 国产精品午夜视频| sm久久捆绑调教精品一区| 怡红院精品视频| 午夜精品久久久久久久96蜜桃| 都市激情亚洲色图| 日本福利片在线观看| 久久伊人蜜桃av一区二区| 亚洲a级黄色片| 久久在线91| 日韩极品视频在线观看| 日韩欧美午夜| 久久久久一区二区| 亚洲一区网址| 国产日产欧美a一级在线| 欧美aa在线观看| 久久的精品视频| 国产中文字幕在线看| 亚洲成av人片在线观看香蕉| 中文字幕永久在线视频| 欧美性xxxxx| 久久老司机精品视频| 国产精品久久久久久亚洲毛片| 成人手机在线免费视频| 国产成人免费xxxxxxxx| 亚洲免费黄色网| 天堂av在线一区| 国产精品无码人妻一区二区在线| 欧美高清日韩| 一区二区精品在线| 欧美手机视频| 久久精品magnetxturnbtih| 一区二区三区高清在线观看| 成人久久久久久| 久久天天久久| 国产精品视频一| 主播大秀视频在线观看一区二区| 欧洲亚洲免费视频| 日韩欧美精品一区二区三区| 久久久久久国产精品久久| а√资源新版在线天堂| 麻豆国产精品va在线观看不卡| 国产69久久| 亚洲午夜久久久久久久| 三级av在线| 亚洲精品资源美女情侣酒店 | 亚洲人成欧美中文字幕| 偷拍精品一区二区三区| 精品久久人人做人人爰| 国内精品久久久久久久久久 | 亚洲妇女无套内射精| 精品一区二区三区香蕉蜜桃| 亚洲欧美激情网| 美女视频免费一区| 亚洲第一狼人区| 麻豆91小视频| 亚洲综合20p| 国产精品18久久久久久久网站| 香蕉视频色在线观看| 国产一区二区三区高清播放| 国产91在线免费观看| 国产成人在线免费| 国模无码视频一区| 99re热视频这里只精品| 少妇光屁股影院| 国产偷国产偷精品高清尤物| 超碰人人人人人人人| 国产精品国产三级国产aⅴ无密码| 日本不卡一区视频| 亚洲视频资源在线| 九九九国产视频| 欧美日韩在线第一页| 免费黄色一级大片| 91精品国产综合久久福利| 亚洲高清视频在线播放| 亚洲男人天堂网站| 亚洲麻豆精品| 欧美激情一级二级| 中文在线а√在线8| 国产精品美女久久久久久免费 | 亚洲成av人乱码色午夜| 青青色在线视频| 精品国产一区av| 6699嫩草久久久精品影院| 欧美最猛性xxxxx亚洲精品| 成人全视频免费观看在线看| 91最新在线免费观看| 欧美福利在线播放网址导航| 水蜜桃亚洲一二三四在线| 亚洲深深色噜噜狠狠爱网站| 黄色一级在线视频| 美女尤物国产一区| 国产ts在线观看| 亚洲国产精品传媒在线观看| 澳门黄色一级片| 色欧美片视频在线观看在线视频| 夜夜躁狠狠躁日日躁av| 亚洲国产99精品国自产| 91社区在线高清| 久久久久国产精品免费网站| 亚洲电影有码| 国产呦系列欧美呦日韩呦| 日韩精品免费一区二区在线观看| 精品久久久无码人妻字幂| 久久精品人人做人人爽电影蜜月| 一级片黄色免费| 国产亚洲欧美一区在线观看| 久操视频免费在线观看| 欧美视频自拍偷拍| 熟妇人妻中文av无码| 日韩一区二区av| 一区一区三区| 国产精品一国产精品最新章节| 成人在线免费观看网站| 亚洲国产成人精品无码区99| 九九视频精品免费| 真实乱视频国产免费观看| 亚洲一区二区三区影院| 亚洲自拍偷拍另类| 亚洲视频在线观看| 国产在线看片免费视频在线观看| 成人做爽爽免费视频| 精品久久久久久久久久久aⅴ| 国产一线二线三线女| 激情六月婷婷久久| 亚洲色图第四色| 日韩欧美国产成人| 神马午夜精品95| 欧美高清视频在线播放| 国产成人免费视频网站视频社区 | 精品一区二区不卡| 欧美欧美全黄| 国产高清999| 亚洲欧洲另类国产综合| 中文区中文字幕免费看| 日韩精品在线观看视频| 2020国产在线| 国产精品日韩一区二区| 欧美精品一卡| wwwxxxx在线观看| 一区二区不卡在线播放 | 日韩欧美亚洲视频| 精品粉嫩超白一线天av| 牛牛精品在线| 国产精品久久久久久免费观看| 欧美国产精品| 波多野结衣网页| 一区二区三区在线视频免费观看| 国产又黄又大又粗的视频| 久久久99久久精品女同性| 国产一区影院| 中文字幕欧美人与畜| 久久99在线观看| 欧美一区二区三区爽爽爽| 欧美一级一区二区| 新版中文在线官网| 国产精品乱码视频| 一区二区国产精品| 全黄一级裸体片| 色婷婷香蕉在线一区二区| 国产黄在线看| 国产日韩欧美在线播放| 性欧美欧美巨大69| 国产精品99精品无码视亚| 香蕉久久一区二区不卡无毒影院| 搡老岳熟女国产熟妇| 欧美中文在线观看| 精品一级毛片| 午夜免费福利网站| 亚洲国产视频一区二区| 少妇精品高潮欲妇又嫩中文字幕| 88国产精品欧美一区二区三区| 日韩中出av| 超碰超碰在线观看| 一区二区三区在线观看网站| 人妻妺妺窝人体色www聚色窝| 欧美亚洲激情在线| 欧美高清视频手机在在线| 波多野吉衣在线视频| 婷婷丁香激情综合| 国产亚洲依依| 7777精品久久久大香线蕉小说| 亚洲三级国产| 国产欧美一区二区三区在线观看视频| 欧美精品乱码久久久久久按摩 | 99久久九九| 国产视频精品视频| 在线欧美小视频| 91高清在线观看视频| 久久久久久九九九九| 久久国产麻豆精品| 国产小视频在线观看免费| 国产一区二区三区欧美| 日韩精品视频中文字幕| 成人免费观看毛片| 一区二区三区日韩在线观看| 色哟哟在线观看| 亚洲一区二区三区四区在线播放 | 永久免费未满蜜桃| 欧美性xxxxx极品少妇| 黄页网站大全在线免费观看| 日本一区视频在线| 国产v综合v亚洲欧| 欧美深性狂猛ⅹxxx深喉 | a在线观看视频| 日产日韩在线亚洲欧美| 亚洲成人一区| 香蕉视频久久久| 亚洲第一页在线| 国产成年精品|