2013-03-01 2 views
1

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

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

  • FileResult
  • FileStreamResult

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

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

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

ответ

1

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

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); 
    } 
} 

Однако, если вы хотите сделать резюме скачать это становится намного сложнее. Here is a great article с примером кода.

+0

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

+0

Yup, что вам нужно будет идти, в инфраструктуре asp.net-mvc нет ничего, что поддержит ее, вам придется написать код. – shenku

0

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

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

Я хочу скрыть URL. :) –