我有一个继承自ApiController
的控制器类,它处理来自客户端的HTTP请求。
其中一个操作会在服务器上生成一个文件,然后将其发送给客户端。
我正在尝试弄清楚如何在响应完成后清理本地文件。
理想情况下,这可以通过一个事件在将响应发送给客户端时触发。
有这样的事件吗?或者我正在努力实现的标准模式是什么?
[HttpGet]
public HttpResponseMessage GetArchive(Guid id, string outputTypes)
{
//
// Generate the local file
//
var zipPath = GenerateArchive( id, outputTypes );
//
// Send the file to the client using the response
//
var response = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(zipPath, FileMode.Open);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
response.Content.Headers.ContentLength = new FileInfo(zipPath).Length;
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = Path.GetFileName(zipPath)
};
return response;
}
答案 0 :(得分:1)
查看OnResultExecuted事件 - 您可以为方法添加自定义过滤器并在那里处理事件。
public class CustomActionFilterAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
///filterContext should contain the id you will need to clear up the file.
}
}
Global.asax中的EndRequest事件也可能是一种选择。
public override void Init() {
base.Init();
EndRequest += MyEventHandler;
}