使用背景:

    虚拟目录(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# asp.net mvc 创建虚拟目录的更多相关文章

  1. asp.net 创建虚拟目录 iis创建虚拟目录

    这几天本人接了个档案管理查询系统的小项目,踩过的坑. 其实功能都挺简单的,大致要求客户有很多pdf文档,为了方便管理,所有要开发一个相当于文件管理系统,本人正好有现成的文件管理系统,修改下就可以.其中 ...

  2. Inno Setup 创建站点,创建虚拟目录

    原文 http://hi.baidu.com/0531_sunmiles/item/ce22554ab7d33d0be9350477 下面的这段代码是用Inno Setup 做安装包的时候创建IIS新 ...

  3. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  4. VS 创建虚拟目录失败,映射到其他文件夹!

    今天,改一哥们项目!立马,问了一下原因.支支吾吾的气死LZ! 算了,就不信自己琢磨不出来!哼 找了半天,坑爹的是在Web.csproj文件中! 用txt打开,发现这个东东! <UseIIS> ...

  5. JBoss像tomcat那样创建部署文件,JBoss创建虚拟目录

    jboss可以像tomcat那样,写一个配置文件,指向应用所在的路径,而不用将应用直接复制到deploy下的某一个以.war结尾的文件夹下吗? 答:好像是不能直接操作,但是可以通过变通的方式来搞定.在 ...

  6. ASP.NET MVC创建的网站

    ASP.NET MVC创建的网站   最近在写一个网站,昨天刚写完,由于要和朋友一起测试,但是他电脑上没有环境,所以希望我在自己电脑上部署一下,让他直接通过浏览器来访问来测试,所以从昨晚到今天上午,通 ...

  7. expdp和impdp快速导出导入,不用创建虚拟目录

    expdp 和impdp不用创建虚拟目录:在cmd直接   expdp 用户名/密码 回车 就导出了,(如果提示输入用户名和密码就输入).再将导出的文件放在oracle默认的dpdump文件夹里面,然 ...

  8. VS中 无法创建虚拟目录 本地IIS IIS Express 外部主机

    从前就有个疑问了,为什么我拉取别人写好的代码后就可以在IIS里面生成一个网站呢? 这里所谓的生成网站,是指包含了所有源代码文件的网站:相对地,发布网站,就是指包含被编译的源文件所得到的DLL文件的网站 ...

  9. ASP.NET MVC 创建 Area 以及使用

    此博客全乘抄袭,只为以后自己能再次用到 参考链接 http://www.cnblogs.com/willick/p/3331519.html ASP.NET MVC允许使用 Area(区域)来组织We ...

  10. 用C#操作IIS创建虚拟目录和网站

    #region CreateWebsite 添加网站 public string CreateWebSite(string serverID, string serverComment, string ...

随机推荐

  1. c#程序员必学清单

    必读书目:1. "Effective C#: 50 Specific Ways to Improve Your C#" by Bill Wagner2. "CLR via ...

  2. 轻松复现一张AI图片

    轻松复现一张AI图片 现在有一个非常漂亮的AI图片,你是不是想知道他是怎么生成的? 今天我会交给大家三种方法,学会了,什么图都可以手到擒来了. 需要的软件 在本教程中,我们将使用AUTOMATIC11 ...

  3. 力扣197(MySQL)-上升的温度(简单)

    题目: 表: Weather 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id . 返回结果 不要求顺序 . 查询结果格式如下例. 解题思路: 方法一:使用窗口函数la ...

  4. ARMS 助力羽如贸易打造全链路可观测最佳实践

    简介: 随着奢侈品行业在我国快速发展,跨境电商市场不断扩张.作为电商行业初创企业的上海羽如贸易有限公司(简称羽如贸易)积极进行数字化创新,打破固有零售思维,借助可观测能力有效提升用户体验,为业务飞速增 ...

  5. [Cryptocurrency] rDAI 与 DAI 的区别, 如何质押 rDAI 获取利息

    以下合约操作需要在安装 MetaMask ( 以太坊的浏览器钱包 ) 的情况下进行. rDAI 通过和 DAI  1 : 1 互换得到,在 rDAI 提供的 dapp 上面操作 https://app ...

  6. ASP.NET Core 浅析环境变量与配置的优先级

    本文将简单介绍在 dotnet 6 下的 ASP.NET Core 里的环境变量当成配置的优先级行为.这部分内容在官方文档都有提到,只是我开始粗心没有看仔细,而踩到了坑,特意写篇博客记录一下 在 AS ...

  7. dotnet 在 UOS 国产系统上使用 MonoDevelop 进行拖控件开发 GTK 应用

    先从一个 Hello World 应用开始,试试和古老的 WinForms 一样的拖控件式开发 在创建完成一个 GTK# 2.0 应用之后,咱可以试试开始拖控件的开发,当然这个开发方式开发出来的应用界 ...

  8. SpringBoot的@Resource和@Autowired+@Qualifier使用

    1.区别 参考: https://blog.csdn.net/xhbzl/article/details/126765893 https://blog.csdn.net/qq_40263124/art ...

  9. python 简明笔记

    python 简明笔记 基础内置类型 数值类型 字面量 3.14e-10 3.14E-10 3.14e+10 #八进制 0o123 #十六进制 0xabf #二进制 0b10101 #进制转换函数 # ...

  10. WEB服务与NGINX(20)- nginx 实现HTTP反向代理功能

    目录 1. nginx实现反向代理功能 1.1 nginx代理功能概述 1.2 NGINX实现HTTP反向代理 1.2.1 HTTP反向代理基本功能 1.2.1.1 反向代理配置参数 1.2.1.2 ...