Server.MapPath返回包含不存在的文件夹的路径

时间:2013-08-07 13:50:58

标签: .net asp.net-mvc server.mappath

我有以下代码:

var dir = @"Content\Posts\" + yr + @"\" + mnth + @"\";
var a = Path.Combine(dir, dy.ToString() + pId.ToString() + ".txt");
//a contains: "Content\\Posts\\2013\\8\\file01.txt"
stts = obj.NotifyMail(title, writeup, "author@gmail.com", a);

而且在NotifyMail功能中我有这个:

public bool NotifyMail(string subject, string body, string toAdd, string filePath)
    {
        …
string attachments = HttpContext.Current.Server.MapPath(filePath);
//NOW here attachments contains: "G:\\Program Files\\Derby\\Work\\Development\\proj\\proj\\`Post`\\Content\\Posts\\2013\\8\\file01.txt"

            var attchmnts = new LinkedResource(attachments);
            attchmnts.ContentId = "attchmnts";
…
    }

现在问题发生在NotifyMail attachments Server.MapPath检索通过Post的物理文件路径时,它返回一个包含无效文件夹的路径,即LinkedResource(attachments);此文件夹没有它存在于任何地方,甚至不存在于硬盘中,我不知道它是如何被拾取和返回的。但是由于这个问题{"Could not find a part of the path ‘G:\\Program Files\\Derby\\Work\\Development\\proj\\proj\\Post\\Content\\Posts\\2013\\8\\file01.txt"’ 正在抛出异常,所以说这个:

{{1}}

2 个答案:

答案 0 :(得分:1)

我不相信MapPath保证路径存在,它只是固定到上下文路径的虚拟路径。

我认为你的问题是你正在使用

 HttpContext.Current.Server.MapPath

尝试使用

HttpContext.Current.Request.MapPath

答案 1 :(得分:0)

我有一个类似的问题,你只需要添加额外的" \\"在你的文件路径之前加上双反斜杠,如下面和额外的" Post"单词(这是你的班级名字)将会消失。

public bool NotifyMail(string subject, string body, string toAdd, string filePath)
    {
string attachments = HttpContext.Current.Server.MapPath(@"\\" + filePath);

            var attchmnts = new LinkedResource(attachments);
            attchmnts.ContentId = "attchmnts";
    }