服务器根和MapPath()

时间:2011-03-31 22:38:23

标签: c# .net asp.net

我的文件结构设置如下:

ServerRoot
    applicationRoot
        filePage.aspx
    files
        chart.png

我的应用程序页面filePage.aspx使用另一个应用程序来自定义构建图表。我需要将它们保存在files文件夹中。这就是我们客户的生产服务器的设置方式,我无法改变它。

我做了_page.Server.MapPath("/files")但它给了我一个InvalidOperationException并声明无法映射路径'/ files'。

更新

所以必须以这种方式设置MapPath(“/”)。我的本地asp.net服务器无法以这种方式处理MapPath,但我们的IIS开发框没有问题,它工作正常。有趣。 如何将其保存到文件?

4 个答案:

答案 0 :(得分:4)

我认为在asp.net 2.0及更高版本中超出虚拟目录的目录结构是违反安全规定的。您需要为目录创建一个虚拟目录并使用它。

答案 1 :(得分:2)

使用

Server.MapPath("~/files")

〜表示Web应用程序的根目录,因此无论您在哪个子目录中,返回的文件夹都是正确的。

答案 2 :(得分:0)

_page.Server.MapPath()将尝试从应用程序的根目录(而不是服务器的根目录)进行映射。

尝试_page.Server.MapPath("../files")

修改

尝试在应用程序根目录之外进行映射时,可能会遇到安全问题。如果是这种情况,你可以这样做:

Server.MapPath("~").Substring(0, Server.MapPath("~").IndexOf(VirtualPathUtility.ToAbsolute("~").Replace("/", "\"))) + "\files"

这看起来相当复杂,但基本上是说“映射我的应用程序,然后从最后删除应用程序根目录并添加'\ files'而不是”。

答案 3 :(得分:0)

尝试

_page.Server.MapPath("files")