在IIS上,Server.MapPath()返回的路径错误

8

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

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

当我尝试通过以下方式获取 Avatars 文件夹的 物理路径

Server.MapPath("/Avatars")

它总是返回

C:\inetpub\wwwroot\Avatars 

代替
C:\Projects\MyProject\Avatars.

在VS2010开发服务器上运行该项目时,一切都很正常。

有人可以帮我解决如何在IIS中获取实际路径的问题吗?

3个回答

3

看起来你正在部署到IIS,这是默认的部署文件夹。当你在本地运行时,开发服务器会从你的本地文件夹运行。

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


如何将项目部署到IIS根目录下的My Project文件夹?我尝试将输出文件夹更改为此目录,但它只部署dll文件,而不是项目文件。 - nolan
使用Visual Studio的发布功能。您只需要dll、aspx/ascx和配置文件(如果有JS和图像也需要)。 - Mrchief

2

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

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


1
似乎您的项目的虚拟目录是在“默认网站”内创建的。因此,如果您的虚拟目录名为“myapp”,要访问您的站点,您应该在地址栏中输入“http://localhost/myapp”。因此,“/”将指向“http://localhost”,其物理路径将为“C:\ inetpub \ wwwroot”。
当您在VS Developer Server(IIS Express)上运行时,您可以通过URL访问您的站点,例如“http://localhost:42111/”。因此,“/”将指向“http://localhost:42111/”,其物理路径将为“C:\ Projects \ MyProject”。
对我来说,解决这个问题最简单的方法是为您的站点重新创建虚拟文件夹。删除现有的虚拟文件夹,并在“默认网站”之外创建新的虚拟文件夹。您将不得不为您的站点分配另一个TCP端口(不是80)。如果您这样做,您将通过URL访问您的站点,例如“http://localhost:8080/”。或者,您可以配置“默认网站”以运行在另一个端口,并为您的站点分配端口80。无论哪种方式,"/"都将指向物理路径为“C:\Projects\MyProject”的“http://localhost:your_port/”。在这种情况下,Server.MapPath将为您正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接