如何使用Server.MapPath获取ASP.NET中网站文件夹外的位置

Dav*_*vid 12 asp.net relative-path

当我的ASP.NET站点使用文档(例如XML)时,我通常按如下方式加载文档:

Server.MapPath("~\Documents\MyDocument.xml")
Run Code Online (Sandbox Code Playgroud)

但是,我想将Documents文件夹移出网站文件夹,以便它现在是网站文件夹的兄弟.这将使文档维护变得更加容易.

但是,重写文档加载代码如下:

Server.MapPath("../../Documents/MyDocument.xml")
Run Code Online (Sandbox Code Playgroud)

导致ASP.NET抱怨它无法"退出顶级目录".

那么有人可以建议我如何相对指定网站文件夹之外的文件夹的位置?我真的不想为明显的部署原因指定绝对路径.

谢谢

大卫

Chr*_*ris 27

如果您知道它相对于您的Web根目录的位置,您可以使用Server.MapPath获取Web根目录的物理位置,然后使用Path类的方法来获取文档路径.

粗略的未经检查的代码类似于:

webRootPath = Server.MapPath("~")
docPath = Path.GetFullPath(Path.Combine(rootPath, "../Documents/MyDocument.xml"))
Run Code Online (Sandbox Code Playgroud)

很抱歉,如果我的语法错误,但Path该类应该是您使用真正的FS路径而不是Web类型路径.

您的方法失败的原因是Server.MapPath在Web服务器上占用一个位置,而您提供的位置无效,因为它位于服务器层次结构根目录的顶部.

  • 可能更好的方法是将 Documents 文件夹作为虚拟目录添加到 IIS 中的网站。 (2认同)

Tad*_*kys 5

docPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\Documents\MyDocument.xml");
Run Code Online (Sandbox Code Playgroud)

AppDomain.BaseDirectory返回当前Web应用程序程序集目录路径.