C# 对路径Server.MapPath的访问被拒绝

C# 对路径Server.MapPath的访问被拒绝,c#,asp.net,download,C#,Asp.net,Download,我创建了一个pdf文档 var document = new Document(); string path = Server.MapPath("AttachementToMail"); PdfWriter.GetInstance(document, new FileStream(path + "/"+DateTime.Now.ToShortDateString()+".pdf", FileMode.Creat

我创建了一个pdf文档

        var document = new Document();
        string path = Server.MapPath("AttachementToMail");
        PdfWriter.GetInstance(document, new FileStream(path + 
                  "/"+DateTime.Now.ToShortDateString()+".pdf", FileMode.Create));
现在我想下载这个文档

 Response.ContentType = "Application/pdf";
 Response.AppendHeader("Content-Disposition", "attachment; filename="+   
                                DateTime.Now.ToShortDateString() + ".pdf" + "");
 Response.TransmitFile(path);
 Response.End();
但它给了我错误 对路径“~\AttachementToMail”的访问被拒绝。


IIS_IUSR的读/写访问权限存在

您提供的写入路径是虚拟路径<代码>传输文件需要绝对路径

您的代码应该如下所示:

var document = new Document();
string path = Server.MapPath("AttachementToMail");
var fileName =  DateTime.Now.ToString("yyyyMMdd")+".pdf";
var fullPath = path + "\\" + fileName;

//Write it to disk
PdfWriter.GetInstance(document, new FileStream(fullPath, FileMode.Create));

//Send it to output
Response.ContentType = "Application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename="+ fileName );

Response.TransmitFile(fullPath);
Response.Flush();
Response.End();
DateTime。现在
表示当前时间。使用它作为文件名时要小心。
使用
ToSortDateString
有点冒险,因为有些文化将
/
置于这种格式。使用
ToString
将允许您修复文件名格式,而不考虑服务器区域性。

server.MapPath返回目录的绝对路径,但您为我们提供了虚拟路径。您确定在调用
传输文件
时已展开
路径
?这是一个明显的问题,但运行该站点的帐户是否有权访问该文件夹?另外:你能明确地说哪一行抛出吗?是不是字符串path=Server.MapPath(“AttachementToMail”)?还有:这只是打字错误吗?目录是否实际是附件邮件?@marcGravel错误是在线响应。传输文件(路径);响应后。传输文件(完整路径);Response.End();文档未下载并放置
响应.Flush()Response.End()之前的code>我添加了Response.Flush();但仍然不起作用:(文档已创建但未下载)