Server.MapPath返回错误的路径

时间:2012-12-31 18:45:51

标签: c# asp.net-mvc asp.net-mvc-3 iis

我有一个MVC应用程序并部署到服务器,我只有ftp访问权限,应用程序的名称是test.foo.com。有一个后端用户将图片上传到应用程序。一切都很好。代码如下:

//in web config this is the value
<add key="NewsImagesPath" value="~/App_Data/NewsImages/" />

// this is in controller
private static readonly string news_images_path = ConfigurationManager.AppSettings["NewsImagesPath"]; 

// in the method
String uploadedFile = fileUploadHelper.UploadFile(file, Server.MapPath(news_images_path));

这里是fileuploadhelper,它返回上传的路径:

public class FileUploadHelper
{
    public string UploadFile(HttpPostedFileBase file, string path)
    { 
        if (file != null && file.ContentLength > 0)
        { 
            FileInfo fileInfo = new FileInfo(file.FileName);
            string fileName = Guid.NewGuid() + fileInfo.Extension;
            var uploadPath = Path.Combine(path, fileName);

            file.SaveAs(uploadPath);
            return uploadPath;
        }

        return null;
    } 
}

这段代码运作正常。

问题是此应用程序部署到foo.com时。图片仍在上传到test.foo.com App_Data文件夹。

ie:我正在从foo.com上传图片,图片存储在:

c:\inetpub\wwwroot\test.foo.com\App_Data

然而它应该去

c:\inetpub\wwwroot\foo.com\App_Data

为什么会这样?

我不知道服务器,IIS是如何配置的。

1 个答案:

答案 0 :(得分:2)

Server.MapPath("~")指向ASP.NET应用程序配置在其下运行的物理根文件夹。所以我猜在IIS中有一些配置,因此test.foo.comfoo.com实际上都指向同一个应用程序。如果您无法访问服务器以进行检查,除了联系您的托管服务提供商之外,您可以做的事情并不多,并且要求了解有关如何设置这些域以及它们映射到哪些应用程序的更多详细信息。