2013-03-01 54 views
1

我想知道是否有任何开源的动作结果代码可用于asp.net mvc我可以通过一个URL,它会回应的内容。在asp.net MVC中的UrlActionResult MVC

就像有一些内在的行动导致

  • FileResult
  • FileStreamResult

我想建立一个自定义的操作结果中,我可以通过一个URL(基本上是一个MP3 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

是的,这是一个非常好的方法,但我想支持可恢复的下载。在你提到的文章中,代码看起来像是在工作,但是现在我正在使用自己创建的自定义类来支持这一点。 – 2014-02-19 06:39:19

+0

是的,这是你将不得不去那里的方式没有在asp.net-mvc框架,将支持它出盒,你将不得不写一些代码。 – shenku 2014-02-19 21:26:53

0

如果您不需要隐藏网址,只需使用重定向。使用重定向与备用服务器的带宽:

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

我想隐藏网址。 :) – 2014-02-19 06:37:33