Управление доступом для загрузки файла и скрытия базового URL-адреса в ASP.NET Сердечник

#asp.net-core #url #download

Вопрос:

Я работаю над ASP.NET Основной проект, и я хочу, чтобы у меня была ссылка для загрузки, которая станет доступной пользователю после того, как он произведет оплату. Файл находится на другом сервере, который совсем не защищен, и я не хочу, чтобы просочился основной адрес, потому что тогда пользователь может получить доступ к ссылке без какой-либо оплаты. Как я могу обезопасить эту ссылку?

Комментарии:

1. Если мой ответ полезен, пожалуйста, примите его как ответ(нажмите на опцию пометить рядом с ответом, чтобы переключить его с серого на заполнение.), см. meta.stackexchange.com/questions/5234/…

Ответ №1:

Как ваш ресурс на другом сервере. Поэтому мы не можем ограничить доступ к нему нашего пользователя, если он знает URL-адрес.

Поэтому я предлагаю вам загрузить файл ресурсов в свой внутренний код после того, как они завершат оплату.

После тестирования я загружаю файл образца и не могу получить URL-адрес ресурса.

Этап тестирования:

Мой пример URL-адреса видео:

http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4

1. Добавьте HttpClient в .net core services.AddHttpClient(); . И определите свой контроллер, как показано на рисунке ниже.

введите описание изображения здесь

2. Вы можете обратиться к моему тестовому коду.

    public async Task<IActionResult> DownloadFile(string fileid)
   {
        // get model by id from your db
        fileModel model = bll.getmodelbyid(fileid);
        string url = model.fileid;   //"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4";

        using (var client = new HttpClient())
        {

            using (var result = await client.GetAsync(url))
            {
                if (result.IsSuccessStatusCode)
                {
                    return new FileContentResult(await result.Content.ReadAsByteArrayAsync(), model.mimetype)//"video/mp4")
                    {
                        FileDownloadName = Guid.NewGuid()   model.fileextension//".mp4"
                    };
                }

            }
        }
        return null;
   }
 

3. Результат теста

введите описание изображения здесь