使用 ASP.net 在 IIS 上创建虚拟目录的正确方法
Proper way of creating virtual directories on IIS using ASP.net
我正在开发一个 ASP.NET Web Api,我想添加一个目录(比方说 "exports"),以便在应用程序存储的服务器上创建生成 reports/logs 等等
有人建议我 "exports" 目录应该是一个虚拟目录,以便服务器管理员可以轻松更改存储文件的物理路径。现在我不太确定处理这个问题的正确方法是什么。
我实现它的方式是在我的项目中创建一个目录,在其中放置一个虚拟文件,然后在发布期间在服务器上创建它。
但我不知道这是否是在服务器上创建应用程序文件夹的合适方式,我也不确定应该应用的访问限制。
此外,这种方式创建了一个相对于应用程序根目录的物理路径,唯一的虚拟路径是从 IIS 服务器应用程序池管理器中手动添加一个具有相同别名的虚拟目录。
所以我想知道在服务器上创建和管理虚拟目录的正确方法是什么。谁负责创建和管理访问权限?
应用程序应该在部署时创建它,还是要求管理员使用服务器应用程序池管理面板手动创建它?
编辑:
找到了一种方法,只是不确定它是否优雅或安全。
正如我已经提到的,我在发布期间创建了一个空的 "exports" 目录 (MyWebApi/exports)。
我的应用程序尝试使用 MapPath 和目录访问该目录 类 :
if(Directory.Exists(System.Web.Hosting.HostingEnvironment.MapPath($"~/exports/")))
{
Console.WriteLine("Export directory exists on server!");
}
因此,如果在 web 部署期间没有出错,"exports" 目录存在于应用程序根目录下,我可以将我的文件保存在那里。
现在如果服务器管理员想要更改导出目录的物理路径并将其放置在服务器的另一个磁盘上,他可以转到 IIS 管理器,右键单击应用程序->添加虚拟目录-> 输入 "exports" 作为别名 以及他们需要的任何物理路径。
请注意,别名必须与发布时创建的别名完全一致。
现在我已经对此进行了测试,如果您授予新物理目录适当的权限,它应该可以正常工作。但我不知道这只是一个 Monkey 补丁还是一个合适的解决方案。
最好的办法是让某人手动创建虚拟目录。否则,您站点的代码必须具有修改 IIS 的权限,以及在您的应用程序路径的根级别的写入权限。授予应用程序这些权限中的任何一个都会带来安全风险。该文件夹只需设置一次。保持简单!
您可以使用虚拟目录方法 - 这很好,它使您不必将静态路径放入 web.config。但是,如果可以避免,请不要将虚拟路径 (~/somefolder
) 硬编码到您的代码中 - 将其保留在配置文件中,以便在部署后进行修改。
我正在开发一个 ASP.NET Web Api,我想添加一个目录(比方说 "exports"),以便在应用程序存储的服务器上创建生成 reports/logs 等等
有人建议我 "exports" 目录应该是一个虚拟目录,以便服务器管理员可以轻松更改存储文件的物理路径。现在我不太确定处理这个问题的正确方法是什么。
我实现它的方式是在我的项目中创建一个目录,在其中放置一个虚拟文件,然后在发布期间在服务器上创建它。 但我不知道这是否是在服务器上创建应用程序文件夹的合适方式,我也不确定应该应用的访问限制。
此外,这种方式创建了一个相对于应用程序根目录的物理路径,唯一的虚拟路径是从 IIS 服务器应用程序池管理器中手动添加一个具有相同别名的虚拟目录。
所以我想知道在服务器上创建和管理虚拟目录的正确方法是什么。谁负责创建和管理访问权限?
应用程序应该在部署时创建它,还是要求管理员使用服务器应用程序池管理面板手动创建它?
编辑:
找到了一种方法,只是不确定它是否优雅或安全。 正如我已经提到的,我在发布期间创建了一个空的 "exports" 目录 (MyWebApi/exports)。 我的应用程序尝试使用 MapPath 和目录访问该目录 类 :
if(Directory.Exists(System.Web.Hosting.HostingEnvironment.MapPath($"~/exports/")))
{
Console.WriteLine("Export directory exists on server!");
}
因此,如果在 web 部署期间没有出错,"exports" 目录存在于应用程序根目录下,我可以将我的文件保存在那里。
现在如果服务器管理员想要更改导出目录的物理路径并将其放置在服务器的另一个磁盘上,他可以转到 IIS 管理器,右键单击应用程序->添加虚拟目录-> 输入 "exports" 作为别名 以及他们需要的任何物理路径。 请注意,别名必须与发布时创建的别名完全一致。
现在我已经对此进行了测试,如果您授予新物理目录适当的权限,它应该可以正常工作。但我不知道这只是一个 Monkey 补丁还是一个合适的解决方案。
最好的办法是让某人手动创建虚拟目录。否则,您站点的代码必须具有修改 IIS 的权限,以及在您的应用程序路径的根级别的写入权限。授予应用程序这些权限中的任何一个都会带来安全风险。该文件夹只需设置一次。保持简单!
您可以使用虚拟目录方法 - 这很好,它使您不必将静态路径放入 web.config。但是,如果可以避免,请不要将虚拟路径 (~/somefolder
) 硬编码到您的代码中 - 将其保留在配置文件中,以便在部署后进行修改。