C# .NET創(chuàng)建虛擬目錄的方法詳解
使用背景
虛擬目錄(virtual directory),計(jì)算機(jī)術(shù)語(yǔ),每個(gè) Internet服務(wù)可以從多個(gè)目錄中發(fā)布。通過(guò)以通用命名約定 (UNC) 名、用戶(hù)名及用于訪問(wèn)權(quán)限的密碼指定目錄,可將每個(gè)目錄定位在本地驅(qū)動(dòng)器或網(wǎng)絡(luò)上。指定客戶(hù) URL地址,
服務(wù)將整個(gè)發(fā)布目錄集提交給客戶(hù)作為一個(gè)目錄樹(shù)。宿主目錄是“虛擬”目錄樹(shù)的根。虛擬目錄的實(shí)際子目錄對(duì)于客戶(hù)也是可用的。只有http://www.服務(wù)支持虛擬服務(wù)器;而 FTP和 gopher服務(wù)則只能有一個(gè)宿主目錄。
虛擬目錄不出現(xiàn)于目錄列表中(也稱(chēng)為http://www.服務(wù)的“目錄瀏覽”)。要訪問(wèn)虛擬目錄,用戶(hù)必須知道虛擬目錄的別名,并在瀏覽器中鍵入 URL即可訪問(wèn)。
簡(jiǎn)單來(lái)說(shuō):一般的情況下,我們的文件保存路徑為默認(rèn)根目錄。但是,需要進(jìn)行訪問(wèn)其他磁盤(pán)中的數(shù)據(jù)時(shí)就需要進(jìn)行創(chuàng)建虛擬目錄來(lái)進(jìn)行訪問(wèn)了。
那么具體怎么創(chuàng)建并且使用呢?話不多說(shuō),開(kāi)擼!
配置
1,引用using System.DirectoryServices;
2,在web.config文件的 <system.web>下增加節(jié)點(diǎn):
<identity impersonate="true" userName="Administrator" password="" />
其中userName為計(jì)算機(jī)用戶(hù)名稱(chēng),password為計(jì)算機(jī)登錄密碼沒(méi)有則填寫(xiě)空。需要有這個(gè)標(biāo)識(shí)用來(lái)操作iis的虛擬目錄。
創(chuàng)建
新增一個(gè)幫助類(lèi),然后寫(xiě)入以下代碼(備注寫(xiě)的都很清楚):
/// <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站點(diǎn)ID</param>
/// <param name="dirName">虛擬文件夾名稱(chēng)</param>
/// <param name="path">物理路徑</param>
/// <param name="userName">用戶(hù)名稱(chēng)</param>
/// <param name="userPass">用戶(hù)密碼</param>
/// <param name="appPoolId">應(yīng)用池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;//虛擬目錄名稱(chēng)
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);
//設(shè)置虛擬目錄指向的物理路徑
tbEntry.Properties["Path"][0] = physicalPath;
//設(shè)置讀取權(quán)限
tbEntry.Properties["AccessRead"][0] = true;
//允許寫(xiě)入
tbEntry.Properties["AccessWrite"][0] = false;
//腳本資源訪問(wèn)
tbEntry.Properties["AccessExecute"][0] = false;
//允許匿名訪問(wèn)
tbEntry.Properties["AuthAnonymous"][0] = true;
// 設(shè)置目錄的安全性,0表示不允許匿名訪問(wèn),1為允許,3為基本身份驗(yàn)證,7為windows繼承身份驗(yàn)證
tbEntry.Properties["AuthFlags"][0] = 1;
//允許基本驗(yàn)證
tbEntry.Properties["AuthBasic"][0] = false;
//允許WIndows集成驗(yàn)證
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;
//應(yīng)用程序名稱(chēng)
tbEntry.Properties["AppFriendlyName"][0] = virtualDirName;
//應(yīng)用程序保護(hù)
tbEntry.Properties["AppIsolated"][0] = 2;
//設(shè)置默認(rèn)文檔
//tbEntry.Properties["DefaultDoc"][0] = "index.asp,index.html,index.htm";
tbEntry.Properties["EnableDefaultDoc"][0] = true;
//日志訪問(wèn)
tbEntry.Properties["DontLog"][0] = true;
////用戶(hù)名
//tbEntry.Properties["AnonymousUserName"][0] = "Administrator";
////用戶(hù)密碼
//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;
}
}使用
我們?cè)陧?xiàng)目運(yùn)行的時(shí)候進(jìn)行調(diào)用CreateVirtualDir函數(shù),不過(guò)并不是所有的都需要進(jìn)行創(chuàng)建虛擬目錄。這里我在配置文件中設(shè)置了一個(gè)參數(shù)。用來(lái)判斷是否開(kāi)啟虛擬目錄。然后配置文件中也有設(shè)定的物理路徑。僅供參考這種方式。

iis發(fā)布運(yùn)行后,則可以通過(guò)自己創(chuàng)建的虛擬路徑進(jìn)行訪問(wèn)!如圖:


結(jié)語(yǔ)
到這里就基本結(jié)束了。沒(méi)有特別難的操作,但如果能和配置文件相結(jié)合設(shè)置的靈活 會(huì)非常的方便。減少了發(fā)布后繁瑣的操作(不需要人手動(dòng)去創(chuàng)建虛擬目錄)。
以上代碼有獲取名字或者路徑的方法更改為自己想要的名稱(chēng)就可以使用了。
到此這篇關(guān)于C# .NET創(chuàng)建虛擬目錄的方法詳解的文章就介紹到這了,更多相關(guān)C# .NET創(chuàng)建虛擬目錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫(kù)中讀取頭像
C#提供的PictureBox控鍵默認(rèn)情況下是方形的非常大的影響美觀,怎么解決這一問(wèn)題呢?下面小編給大家?guī)?lái)了C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫(kù)中讀取頭像的操作代碼,感興趣的朋友一起學(xué)習(xí)下吧2021-08-08
C#實(shí)現(xiàn)簡(jiǎn)單屏幕監(jiān)控的方法
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單屏幕監(jiān)控的方法,涉及C#的圖標(biāo)隱藏及屏幕截圖等技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
c# Rank屬性與GetUpperBound方法的深入分析
本篇文章是對(duì)c#中的Rank屬性與GetUpperBound方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
unity實(shí)現(xiàn)弧形移動(dòng) 可角度自定
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)弧形移動(dòng),可角度自定,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
C#實(shí)現(xiàn)Quartz任務(wù)調(diào)度的示例代碼
使用 Quartz.NET,你可以很容易地安排任務(wù)在應(yīng)用程序啟動(dòng)時(shí)運(yùn)行,或者每天、每周、每月的特定時(shí)間運(yùn)行,甚至可以基于更復(fù)雜的調(diào)度規(guī)則,本文給大家介紹了C#實(shí)現(xiàn)Quartz任務(wù)調(diào)度,需要的朋友可以參考下2024-04-04

