使用背景:
虛擬目錄不出現於目錄列表中(也稱為http://www.服務的“目錄瀏覽”)。要訪問虛擬目錄,用戶必須知道虛擬目錄的別名,並在瀏覽器中鍵入 URL即可訪問。
簡單來說:一般的情況下,我們的文件保存路徑為默認根目錄。但是,需要進行訪問其他磁盤中的數據時就需要進行創建虛擬目錄來進行訪問了。
那么具體怎么創建並且使用呢?話不多說,開擼!
配置:
1,引用using System.DirectoryServices;
2,在web.config文件的 <system.web>下增加節點:
<identity impersonate="true" userName="Administrator" password="" />
其中userName為計算機用戶名稱,password為計算機登錄密碼沒有則填寫空。需要有這個標識用來操作iis的虛擬目錄。
創建:
新增一個幫助類,然后寫入以下代碼(備注寫的都很清楚):
/// <summary> /// 刪除虛擬路徑 /// </summary> /// <param name="virtualdirname"></param> public static void DeleteVirtualDir(string virtualdirname) { DirectoryEntry _rootEntry; _rootEntry = new DirectoryEntry("IIS://localhost/W3SVC/" + SiteId + "/root"); object[] paras = new object[2]; paras[0] = "IIsVirtualDir"; paras[1] = virtualdirname; _rootEntry.Invoke("Delete", paras); _rootEntry.CommitChanges(); } /// <summary> /// 創建虛擬目錄 /// </summary> /// <param name="siteId">iis站點ID</param> /// <param name="dirName">虛擬文件夾名稱</param> /// <param name="path">物理路徑</param> /// <param name="userName">用戶名稱</param> /// <param name="userPass">用戶密碼</param> /// <param name="appPoolId">應用池Id</param> /// <returns></returns> public static string CreateVirtualDir(string siteId, string dirName, string path, string userName, string userPass, string appPoolId) { string constIISWebSiteRoot = "IIS://localhost/W3SVC/" + siteId + "/ROOT"; string virtualDirName = dirName;//虛擬目錄名稱 string physicalPath = path; try { DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot); foreach (System.DirectoryServices.DirectoryEntry v in root.Children) { if (v.Name == dirName) { DeleteVirtualDir(dirName); } } DirectoryEntry tbEntry = root.Children.Add(virtualDirName, "IIsWebVirtualDir"); tbEntry.Invoke("AppCreate", true); //設置虛擬目錄指向的物理路徑 tbEntry.Properties["Path"][0] = physicalPath; //設置讀取權限 tbEntry.Properties["AccessRead"][0] = true; //允許寫入 tbEntry.Properties["AccessWrite"][0] = false; //腳本資源訪問 tbEntry.Properties["AccessExecute"][0] = false; //允許匿名訪問 tbEntry.Properties["AuthAnonymous"][0] = true; // 設置目錄的安全性,0表示不允許匿名訪問,1為允許,3為基本身份驗證,7為windows繼承身份驗證 tbEntry.Properties["AuthFlags"][0] = 1; //允許基本驗證 tbEntry.Properties["AuthBasic"][0] = false; //允許WIndows集成驗證 tbEntry.Properties["AuthNTLM"][0] = false; //索引此資源 tbEntry.Properties["ContentIndexed"][0] = false; //目錄瀏覽 tbEntry.Properties["EnableDirBrowsing"][0] = false; //腳本可執行 tbEntry.Properties["AccessScript"][0] = true; //允許父路徑 tbEntry.Properties["AspEnableParentPaths"][0] = true; //應用程序名稱 tbEntry.Properties["AppFriendlyName"][0] = virtualDirName; //應用程序保護 tbEntry.Properties["AppIsolated"][0] = 2; //設置默認文檔 //tbEntry.Properties["DefaultDoc"][0] = "index.asp,index.html,index.htm"; tbEntry.Properties["EnableDefaultDoc"][0] = true; //日志訪問 tbEntry.Properties["DontLog"][0] = true; ////用戶名 //tbEntry.Properties["AnonymousUserName"][0] = "Administrator"; ////用戶密碼 //tbEntry.Properties["AnonymousUserPass"][0] = ""; ////程序池 //tbEntry.Properties["AppPoolId"][0] = appPoolId; tbEntry.CommitChanges(); root.CommitChanges(); return "1"; } catch (Exception ex) { //return "0"; return ex.Message + "<br>" + ex.Source; } }
使用:
我們在項目運行的時候進行調用CreateVirtualDir函數,不過並不是所有的都需要進行創建虛擬目錄。這里我在配置文件中設置了一個參數。用來判斷是否開啟虛擬目錄。然后配置文件中也有設定的物理路徑。僅供參考這種方式。
iis發布運行后,則可以通過自己創建的虛擬路徑進行訪問!如圖:
結語:
到這里就基本結束了。沒有特別難的操作,但如果能和配置文件相結合設置的靈活 會非常的方便。減少了發布后繁瑣的操作(不需要人手動去創建虛擬目錄)。
以上代碼有獲取名字或者路徑的方法更改為自己想要的名稱就可以使用了。