IIS上的Server.MapPath()路径错误

时间:2011-07-09 14:45:54

标签: asp.net iis

我正在尝试将图片上传到名为的文件夹 ~/Avatars/

我的项目位于VS2010项目文件夹中 `C:/项目/ MyProject的

当我尝试

获取物理路径到Avatars文件夹时
Server.MapPath("/Avatars")

它总是返回

C:\inetpub\wwwroot\Avatars 

而不是

C:\Projects\MyProject\Avatars.

当我在VS2010 dev 服务器上运行项目时,它工作正常。

任何人都可以帮助我如何在IIS中获得实际路径吗?

3 个答案:

答案 0 :(得分:3)

好像您正在部署到IIS,这是部署的默认文件夹。在本地运行时,dev服务器会运行本地文件夹。

您需要的是Server.MapPath("~/Avatars")Server.MapPath("Avatars")。此外,请确保在部署到IIS时,您的站点已部署到C:\inetpub\wwwroot\My Project\

答案 1 :(得分:1)

检查IIS中是否未创建指向路径的虚拟目录 Avatars :“C:\ inetpub \ wwwroot \ Avatars”。

在这种情况下,Server.Mappath返回相同的路径。在这种情况下,从IIS中删除该虚拟目录

答案 2 :(得分:1)

您的项目的虚拟目录似乎是在“默认网站”内部创建的。因此,如果您的虚拟目录名为“ myapp”,则要访问您的站点,您应该在地址栏中输入“ http://localhost/myapp”。因此,“ /”将指向“ http://localhost”,其物理路径将为“ C:\ inetpub \ wwwroot”。

当您在VS Developer Server(IIS Express)上运行时,可以通过“ http://localhost:42111/”之类的URL访问您的站点。因此,“ /”将指向“ http://localhost:42111/”,其物理路径将为“ C:\ Projects \ MyProject”。

对我来说,解决此问题的最简单方法是为您的站点重新创建虚拟文件夹。删除现有的虚拟文件夹,并在“默认网站”之外创建一个新的虚拟文件夹。您将必须为站点分配另一个TCP端口(而不是80)。如果您愿意,您将通过“ http://localhost:8080/”之类的URL访问您的网站。或者,您可以将“默认网站”配置为在另一个端口上运行,并为您的站点分配端口80。无论哪种方式,“ /”都将使用物理路径“ C:\ Projects \ MyProject”指向“ http://localhost:your_port/”。在这种情况下,Server.MapPath会为您正常工作。