c# – ASP.NET Web API StreamContent – 使浏览器显示下载进度

从ASP.NET Web Api 2.x控制器我正在使用
StreamContent类型的实例提供文件.请求文件时,其blob位于数据库中,并打开blob流.然后将blob流用作StreamContent实例的输入.

简化了,我的控制器动作看起来类似于:

[HttpGet]
[Route("{blobId}")]
public HttpResponseMessage DownloadBlob(int blobId)
{
    // ... find the blob in DB and open the 'myBlobStream' based on the given id

    var result = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new StreamContent(myBlobStream)
    };
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    result.Content.Headers.ContentLength = myBlobStream.Length;
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
    {
        FileName = "foo.txt",
        Size = myBlobStream.Length
    };
    return result;
}

当我在Chrome中点击端点(第35页)时,它表示它正在解析主机(localhost),当文件下载后,它会显示在下载栏中.但是,我想知道启用Chrome(或任何其他浏览器)显示下载进度需要什么?

我认为这可以通过包含内容类型,内容长度和内容处置等标题信息来解决,但是从我尝试过的内容来看,这没有任何区别.

最佳答案 原来我的实施是正确的.我关闭了提琴手,一切都按预期工作.不知道fiddler是否会以某种方式等待整个响应在它通过代理发送之前完成 – 至少,这可以解释为什么浏览器保持在“解析主机”状态直到整个文件被下载.

点赞