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