【发布时间】:2013-06-05 14:37:12
【问题描述】:
我正在使用 .NET MVC3 开发一个网站。我有一个控制器,我可以在其中将文件下载到客户端。
[DeleteFileAfterDownloadFilter()]
public FileResult DownloadVersion(int VersionID)
{
//staff to get the tempZipFile
return File(tempZipFile, "zip", "file.zip");
}
我喜欢做的是在下载这个文件后删除这个文件。我想我可以使用ActionFilterAttribute。所以我写了下面的类:
public class DeleteFileAfterDownloadFilter : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
string fileName = ((FileStreamResult)filterContext.Result).FileDownloadName;
File.Delete(fileName);
base.OnResultExecuted(filterContext);
}
}
我想我这里有 2 个问题。
第一个是当我运行这个东西时,它给了我".../Company/DownloadVersion?versionID=2057"页面找不到的错误。有什么办法让它发挥作用?
第二个问题是您可能已经意识到"((FileStreamResult)filterContext.Result).FileDownloadName" 可能不是我要删除的文件路径。它应该是控制器中的“tempZipFile”局部变量。但我不知道如何将该值传递给这个事件。
【问题讨论】:
-
感谢更正,使其更具可读性。
-
而PageNotFound是filter造成的(即没有它下载就OK了)?
-
没有进行下载。
-
没有人知道这个话题吗? :(我卡在这里..
-
您可以使用调试器或通过记录来验证文件名部分。我们的细节太少,无法理解路由错误。
标签: c# asp.net-mvc-3 actionfilterattribute