如何使用ASP.NET MVC FileStreamResult流式传输部分内容

o_o*_*o_o 10 asp.net-mvc streaming http partial

我们使用FileStreamResult为基于Silverlight MediaElement的视频播放器提供视频数据:

public ActionResult Preview(Guid id) {
    return new FileStreamResult(
        Services.AssetStore.GetStream(id, ContentType.Preview),
        "application/octet-stream");
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,Silverlight视频播放器在开始播放之前会下载整个视频文件.由于我们的PreviewAction不支持下载部分内容,因此会出现此行为.

(旁注:如果文件托管在IIS虚拟目录中,我们可以在视频中的任何位置继续播放,但是出于安全和审核原因,我们无法提供直接下载链接.所以这不是一个选项.)

我们如何改进Controller Action以支持部分HTTP内容?

我假设我们首先必须通知客户端我们支持它(向HEAD请求添加"Accept-Ranges:bytes"标头),然后我们必须评估HTTP"Range"标头并使用响应流式传输所请求的文件范围206.代码是否可以在IIS6上托管ASP.NET MVC?是否已有一些代码可用?

另见:

Eri*_*ren 5

CodePlex上有一个项目,它提供了这个确切的功能.

http://mediastreamingmvc.codeplex.com/

看一看.它是专门为此场景创建的,您希望拥有一个表示虚拟资源请求的操作,并在需要时返回部分内容,而不需要开发人员做很多事情来支持它(Action Filter和Result类型的选择.)