UrlActionResult в asp.net MVC

Я хочу знать, есть ли какой-либо код результата действия с открытым исходным кодом, доступный для asp.net mvc, в котором я могу передать URL-адрес, и он ответит на содержимое.

Так же, как есть некоторые встроенные результаты действий

  • FileResult
  • FileStreamResult

Я хочу создать собственный результат действия, в котором я могу передать URL-адрес (в основном URL-адрес mp3), который будет загружен в память, а содержимое будет передано в текущий исполняемый ответ.

Он также должен поддерживать загрузку возобновления, если это поддерживается сервером и клиентом. Это обязательно для меня.

public UrlActionResult DownloadUrl(string url)
{
     return new UrlActionResult("http://www.example.com/audiofile.mp3");
}

person Manish Rawat    schedule 01.03.2013    source источник


Ответы (2)


Для базового сценария вы можете использовать что-то вроде этого:

public class DownloadResult : ActionResult
{
    private readonly FileStreamResult _fileStreamResult;

    public DownloadResult(string url, string contentType)
    {
        using (var myWebClient = new WebClient())
        {
            var myStream = myWebClient.OpenRead(url);
            _fileStreamResult = new FileStreamResult(myStream, contentType);
        }
    }

    public override void ExecuteResult(ControllerContext context)
    {
        _fileStreamResult.ExecuteResult(context);
    }
}

Однако, если вы хотите выполнить загрузку резюме, это становится намного сложнее. Вот отличная статья с примером код.

person shenku    schedule 18.02.2014
comment
Да, это действительно очень хороший способ, но я хочу поддерживать возобновляемые загрузки. В статье, о которой вы упомянули, код выглядит как работающий, но теперь я использую пользовательские классы, созданные мной, чтобы поддерживать это. - person Manish Rawat; 19.02.2014
comment
Да, именно так вам придется пойти, в инфраструктуре asp.net-mvc нет ничего, что бы поддерживало его из коробки, вам придется написать некоторый код. - person shenku; 20.02.2014

Если вам не нужно скрывать URL-адрес, просто используйте перенаправление. Использование перенаправления с резервной пропускной способностью вашего сервера:

public ActionResult DownloadUrl(string url)
{
     return new Redirect("http://www.example.com/audiofile.mp3");
}
person Mouk    schedule 18.02.2014
comment
Я хочу скрыть URL. :) - person Manish Rawat; 19.02.2014