在WebAPI 2 / MVC 5

时间:2018-02-28 02:50:32

标签: c# asp.net-web-api autofac

我有一个临时文件对象,它包裹File并在调用Dispose()时将其删除。从我所看到的情况来看,当我使用StreamContent返回响应时,文件流将保持打开状态,直到响应处理完毕。

不幸的是,调用处理请求范围以及后续调用File.Delete()是在响应管道的消耗读取有时间自行关闭之前进行的(尽管读完了?)。

我的短期修复是创建一个StreamContent子类型,在完成后手动处理临时文件,同时在我的容器配置中注册为ExternallyOwned

我可以看到一些重新考虑;

  • 注册创建的文件,然后依靠工作人员进行清理(放在Temp文件夹中,因此手动清理奇怪的丢失文件并不重要)

  • 创建一个自定义范围,其生命周期在请求和响应之外。

  • TemporaryFileContent处理处理的当前方法

归结为当资源尚未作为Response的一部分完全释放时被调用的处理,我问这个问题主要是衡量是否使用IDispose作为临时文件清理机制请求范围是一个好主意。这些文件的设计目的不是在当前请求之外,因此它似乎很合适,但我可能会误用它。

0 个答案:

没有答案