Я разрабатываю веб-сайт с использованием .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» в контроллере. Но я не знаю, как передать это значение этому событию.