Есть сервис, который отдает пользователям видео файлы, реализован метод для скачивания файла, который отдает файл через метод File
[HttpGet("file/{guid}/download")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> DownloadFile([FromRoute] Guid guid)
{
var file = await _mediaContentService.DownloadFile(guid);
return File(file.Stream, file.ContentType, file.FileName);
}
Можно ли каким-либо образом реализовать ограничение на скачивание файла, чтобы, например, в единицу времени не больше N пользователей качало файл.
Пробовал реализовать через semaphore, но после возврата из метода он освобождается, а файл еще докачивается
[HttpGet("file/{guid}/download")]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> DownloadFile([FromRoute] Guid guid)
{
try
{
await _semaphore.WaitAsync();
var file = await _mediaContentService.DownloadFile(guid);
return File(file.Stream, file.ContentType, file.FileName);
}
finally
{
_semaphore.Release();
}
}
, соответственно, ограничение не работает.
Может быть, кто-то реализовывал такой функционал и поможет советом?
P.S. S3 хранилище использовать не можем