#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. Результат теста