如果他的第一个文件下载尚未完成,我想限制用户下载第二个文件,我的方法是在数据库中插入一条用于下载文件的记录,完成属性等于 false;下载完成后,我更改了finished = true;因此用户将能够下载另一个文件。为了知道下载是否完成,我创建了一个从 FileStreamResult 派生的名为 ControlledFileStreamResult 的类。和一个实现 IResultFilter 的过滤器。在这个过滤器中;我以控制 ControlledFileStreamResult 中的属性值的方式实现 OnResultExecuted,如果 DownloadCompleted == true 则更新数据库并设置 finished = true; 或者如果 DownloadCanceled == true 然后从数据库中删除记录。
这种方法在用户使用 Internet 下载管理器和类似的下载管理器程序下载文件之前效果很好;如果下载取消,OnResultExecuted 无法捕获。并且当这些类型的程序使用多次发送的请求时,如果下载成功完成,我无法设法从数据库中删除记录或设置完成=真。