最初のファイルのダウンロードがまだ完了していない場合、ユーザーが 2 番目のファイルをダウンロードできないように制限したいのですが、私のアプローチは、finished 属性が false のデータベースにファイルをダウンロードするためのレコードを挿入することです。ダウンロードが終了したら、finished = true; を変更します。そのため、ユーザーは別のファイルをダウンロードできます。ダウンロードが完了したかどうかを知るために、FileStreamResult から派生した ControlledFileStreamResult という名前のクラスを作成しました。および IResultFilter を実装する Filter。このフィルターで。ControlledFileStreamResult のプロパティ値を制御する方法で OnResultExecuted を実装し、DownloadCompleted == true の場合はデータベースを更新し、finished = true; を設定します。または DownloadCanceled == true の場合、db からレコードを削除します。
このアプローチは、ユーザーが Internet Download Manager や同様のダウンロード マネージャー プログラムを使用してファイルをダウンロードするまではうまく機能します。ダウンロードがキャンセルされた場合、OnResultExecuted はキャッチできません。また、これらのタイプのプログラムが複数回送信されたリクエストを使用したため、ダウンロードが正常に完了した場合、データベースからレコードを削除したり、finished=true を設定したりすることができません。