发送响应时的事件

时间:2012-12-10 13:35:40

标签: c# asp.net-mvc-4 asp.net-web-api

我有一个继承自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;
}

1 个答案:

答案 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;
}