C# ASP.NET文件下载到客户端,并在服务器上进行清理

C# ASP.NET文件下载到客户端,并在服务器上进行清理,c#,asp.net,C#,Asp.net,我想我的问题和其他人的问题很相似,但只是不同而已,我不会因为问这个问题而被打击。我将Excel文件复制到一个唯一的(特定于用户的)名称,然后使用Open XML SDK 2.0打开新文件,更改一些数据,关闭(保存)特定于用户的文件,然后将其下载到客户端。我的(旧WebForms)代码如下所示: Response.ContentType = "application/Excel"; Response.AppendHeader("Content-Disposition", "attachment;

我想我的问题和其他人的问题很相似,但只是不同而已,我不会因为问这个问题而被打击。我将Excel文件复制到一个唯一的(特定于用户的)名称,然后使用Open XML SDK 2.0打开新文件,更改一些数据,关闭(保存)特定于用户的文件,然后将其下载到客户端。我的(旧WebForms)代码如下所示:

Response.ContentType = "application/Excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + outputFile);
Response.Flush();
Response.TransmitFile(Path.Combine(outputFolder, outputFile));
Response.End();
File.Delete(Path.Combine(outputFolder, outputFile));
正如在其他问题中所详细记录的那样,Response.End()会导致异常,从而阻止执行File.Delete。有趣的是,即使我处理Response.End()异常,它也会通过调用代码一直保持“异常”。对清理服务器上的文件有什么建议吗?我尝试了一些不包括Response.End()的其他建议,但我将页面数据和其他疯狂的东西详细记录到我的Excel文件中

我对本文中的WebClient内容寄予厚望,但它下载到了服务器而不是客户端:


我个人不喜欢在发送响应后需要代码继续执行的任何内容。我会用三种方法中的一种来处理

  • 找到一种不写入文件而完全在内存中进行更改的方法。我不是一个开放式XML专家,所以我不确定这个SDK是否可行

  • 将文件读入内存。删除该文件。返回内容

  • 使用清理作业(如果托管Azure云,则为Azure Web作业)实现一个临时文件夹,该文件夹仅删除超过N秒的内容


  • 我个人不喜欢任何要求在发送响应后继续执行代码的事情。我会用三种方法中的一种来处理

  • 找到一种不写入文件而完全在内存中进行更改的方法。我不是一个开放式XML专家,所以我不确定这个SDK是否可行

  • 将文件读入内存。删除该文件。返回内容

  • 使用清理作业(如果托管Azure云,则为Azure Web作业)实现一个临时文件夹,该文件夹仅删除超过N秒的内容


  • #1不可能与Open XML SDK一起使用。我也在考虑尝试#2,因此,在你支持该动议的情况下,我将这样做。我试图避免使用#3,因为我不喜欢依赖于时间的东西。我也在考虑尝试#2,因此,在你支持该动议的情况下,我将这样做。我尽量避免做第三件事,因为我不喜欢依赖时间的事情。