1

ApiControllerクライアントからの HTTP 要求を継承して処理するコントローラー クラスがあります。

アクションの 1 つは、サーバー上でファイルを生成し、それをクライアントに送信します。

応答が完了したら、ローカル ファイルをクリーンアップする方法を見つけようとしています。

理想的には、これは、応答がクライアントに送信されると発生するイベントを通じて行われます。

そのようなイベントはありますか?または、私が達成しようとしていることの標準パターンはありますか?

[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;
}
4

1 に答える 1

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;
}
于 2012-12-10T14:16:06.433 に答える