溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET虛擬文件系統(tǒng)的作用

發(fā)布時間:2021-09-18 02:00:54 來源:億速云 閱讀:139 作者:chen 欄目:編程語言

這篇文章主要講解了“ASP.NET虛擬文件系統(tǒng)的作用”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ASP.NET虛擬文件系統(tǒng)的作用”吧!

具體實現(xiàn)步驟如下:

一、開發(fā)web用戶控件

這一步和以前的開發(fā)沒有區(qū)別。
1、首先新建一個web應用程序(需要VS2005 sp1支持)
2、然后在里面開發(fā)幾個web用戶控件
3、在ascx文件上右鍵-〉屬性-〉生成操作選擇嵌入的資源
4、生成dll就可以了(dll的名字為:Test.Control.dll,后面會用到)

二、開發(fā)一個虛擬文件系統(tǒng)提供類

這一步是最重要的一步。

具體思路就是:在系統(tǒng)中注冊這個類,然后在每訪問一個文件/資源的時候會自動調(diào)用這個類,在這個類中判斷文件的路徑是否是我們定義的,如果是就用我們的邏輯來處理,即從dll中取出資源。

首先把類的代碼貼出來,我想可能許多人應該和我一樣,喜歡直接先看代碼:

  1. DllVirtualPathProvider  

  2. public class DllVirtualPathProvider : System.Web.Hosting.VirtualPathProvider  

  3. {  

  4. public DllVirtualPathProvider()  

  5. {  

  6. }  

  7.  

  8. public override string CombineVirtualPaths(string basePath, string relativePath)  

  9. {  

  10. if (IsAppResourcePath(basePath))  

  11. {  

  12. return null;    

  13. }  

  14.  

  15. return Previous.CombineVirtualPaths(basePath, relativePath);    

  16. }  

  17.  

  18. public override System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)  

  19. {  

  20. return Previous.CreateObjRef(requestedType);    

  21. }  

  22.  

  23. public override bool DirectoryExists(string virtualDir)  

  24. {  

  25. if (IsAppResourcePath(virtualDir))  

  26. {  

  27. return true;    

  28. }  

  29. else  

  30. {  

  31. return Previous.DirectoryExists(virtualDir);    

  32. }  

  33.  

  34. }  

  35.  

  36. public override string GetCacheKey(string virtualPath)  

  37. {  

  38. if (IsAppResourcePath(virtualPath))  

  39. {  

  40. return null;    

  41. }  

  42. else  

  43. {  

  44. return Previous.GetCacheKey(virtualPath);    

  45. }  

  46. }  

  47.  

  48. public override string GetFileHash(string virtualPath, 
    IEnumerable virtualPathDependencies)  

  49. {  

  50. if (IsAppResourcePath(virtualPath))  

  51. {  

  52. return null;    

  53. }  

  54. else  

  55. {  

  56. return Previous.GetFileHash(virtualPath, virtualPathDependencies);    

  57. }  

  58. }  

  59.  

  60. private bool IsAppResourcePath(string virtualPath)  

  61. {  

  62. String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);    

  63. return checkPath.StartsWith("~/MyUserControl/Test.Control.dll/", 
    StringComparison.InvariantCultureIgnoreCase);    

  64. }  

  65.  

  66. public override bool FileExists(string virtualPath)  

  67. {  

  68. return (IsAppResourcePath(virtualPath) || Previous.FileExists(virtualPath));    

  69. }  

  70.  

  71. public override VirtualFile GetFile(string virtualPath)  

  72. {  

  73. if (IsAppResourcePath(virtualPath))  

  74. {  

  75. return new AssemblyResourceVirtualFile(virtualPath);    

  76. }  

  77. else  

  78. {  

  79. return Previous.GetFile(virtualPath);    

  80. }  

  81. }  

  82.  

  83. public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath,  

  84. System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)  

  85. {  

  86. if (IsAppResourcePath(virtualPath))  

  87. {  

  88. string path = HttpRuntime.AppDomainAppPath + virtualPath.Substring(1);    

  89.  

  90. return new System.Web.Caching.CacheDependency(path);    

  91. }  

  92. else  

  93. {  

  94. return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);    

  95. }  

  96. }  

感謝各位的閱讀,以上就是“ASP.NET虛擬文件系統(tǒng)的作用”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對ASP.NET虛擬文件系統(tǒng)的作用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI