C# .NET創(chuàng)建虛擬目錄的方法詳解
使用背景
虛擬目錄(virtual directory),計算機術語,每個 Internet服務可以從多個目錄中發(fā)布。通過以通用命名約定 (UNC) 名、用戶名及用于訪問權限的密碼指定目錄,可將每個目錄定位在本地驅動器或網(wǎng)絡上。指定客戶 URL地址,
服務將整個發(fā)布目錄集提交給客戶作為一個目錄樹。宿主目錄是“虛擬”目錄樹的根。虛擬目錄的實際子目錄對于客戶也是可用的。只有http://www.服務支持虛擬服務器;而 FTP和 gopher服務則只能有一個宿主目錄。
虛擬目錄不出現(xiàn)于目錄列表中(也稱為http://www.服務的“目錄瀏覽”)。要訪問虛擬目錄,用戶必須知道虛擬目錄的別名,并在瀏覽器中鍵入 URL即可訪問。
簡單來說:一般的情況下,我們的文件保存路徑為默認根目錄。但是,需要進行訪問其他磁盤中的數(shù)據(jù)時就需要進行創(chuàng)建虛擬目錄來進行訪問了。
那么具體怎么創(chuàng)建并且使用呢?話不多說,開擼!
配置
1,引用using System.DirectoryServices;
2,在web.config文件的 <system.web>下增加節(jié)點:
<identity impersonate="true" userName="Administrator" password="" />
其中userName為計算機用戶名稱,password為計算機登錄密碼沒有則填寫空。需要有這個標識用來操作iis的虛擬目錄。
創(chuàng)建
新增一個幫助類,然后寫入以下代碼(備注寫的都很清楚):
/// <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>
/// 創(chuàng)建虛擬目錄
/// </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;
//腳本可執(zhí)行
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函數(shù),不過并不是所有的都需要進行創(chuàng)建虛擬目錄。這里我在配置文件中設置了一個參數(shù)。用來判斷是否開啟虛擬目錄。然后配置文件中也有設定的物理路徑。僅供參考這種方式。

iis發(fā)布運行后,則可以通過自己創(chuàng)建的虛擬路徑進行訪問!如圖:


結語
到這里就基本結束了。沒有特別難的操作,但如果能和配置文件相結合設置的靈活 會非常的方便。減少了發(fā)布后繁瑣的操作(不需要人手動去創(chuàng)建虛擬目錄)。
以上代碼有獲取名字或者路徑的方法更改為自己想要的名稱就可以使用了。
到此這篇關于C# .NET創(chuàng)建虛擬目錄的方法詳解的文章就介紹到這了,更多相關C# .NET創(chuàng)建虛擬目錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C# mysql 插入數(shù)據(jù),中文亂碼的解決方法
用C#操作mysql時, 插入數(shù)據(jù)中文都是亂碼,只顯示問號,數(shù)據(jù)庫本身使用的是utf-8字符2013-10-10
C# Char結構中IsLetterOrDigit(Char)的方法詳解
這篇文章給大家介紹了C#的Char 結構的IsLetterOrDigit(Char)的方法,并通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-02-02
VS2022+unity3D開發(fā)環(huán)境搭建的實現(xiàn)步驟
本文主要介紹了VS2022+unity3D開發(fā)環(huán)境搭建的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
WPF實現(xiàn)繪制統(tǒng)計圖(柱狀圖)的方法詳解
這篇文章主要為大家詳細介紹了如何基于WPF實現(xiàn)實現(xiàn)統(tǒng)計圖(柱狀圖)的繪制,文中的示例代碼簡潔易懂,對我們學習WPF有一定幫助,感興趣的可以了解一下2022-07-07

