C# .NET創建虛擬目錄的方法詳解

使用背景

虛擬目錄(virtual directory),計算機術語,每個 Internet服務可以從多個目錄中發佈。通過以通用命名約定 (UNC) 名、用戶名及用於訪問權限的密碼指定目錄,可將每個目錄定位在本地驅動器或網絡上。指定客戶 URL地址,

服務將整個發佈目錄集提交給客戶作為一個目錄樹。宿主目錄是“虛擬”目錄樹的根。虛擬目錄的實際子目錄對於客戶也是可用的。隻有http://www.服務支持虛擬服務器;而 FTP和 gopher服務則隻能有一個宿主目錄。

虛擬目錄不出現於目錄列表中(也稱為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發佈運行後,則可以通過自己創建的虛擬路徑進行訪問!如圖:

結語

到這裡就基本結束瞭。沒有特別難的操作,但如果能和配置文件相結合設置的靈活 會非常的方便。減少瞭發佈後繁瑣的操作(不需要人手動去創建虛擬目錄)。

以上代碼有獲取名字或者路徑的方法更改為自己想要的名稱就可以使用瞭。

到此這篇關於C# .NET創建虛擬目錄的方法詳解的文章就介紹到這瞭,更多相關C# .NET創建虛擬目錄內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: