防止FileResult分块响应

时间:2017-02-21 06:23:19

标签: asp.net-core chunked-encoding kestrel-http-server fileresult

我有一个ASP.NET Core 1.2应用程序,它将文件发送给用户。为此,我使用FileResult。我的代码如下:

return PhysicalFile(Path.GetFullPath(filePath), QMimeTypeMap.GetMimeType(Path.GetExtension(file.Name)));

我已尝试使用响应缓冲,如https://github.com/aspnet/BasicMiddleware/blob/dev/samples/ResponseBufferingSample/Startup.cs#L17,但它对我不起作用。

这会正确返回文件,但会使用Transfer-Encoding: Chunked,这会导致下载显示在"不确定"形式即没有进度条。我已尝试自行设置Content-Length标题,但会自动删除。

编辑:请注意,如上所述,我已经尝试过响应缓冲。这并没有解决我的问题。

编辑2 :以下是我使用的代码的SSCCE

FilesController.cs >操作

[HttpGet("files")]
public async Task<IActionResult> Download(string driveName, [Bind(Prefix = "id")] uint? fileId = null, [Bind(Prefix = "download")] int forceDownload = 0)
{
    // Send file info
    string filePath = "...";
    HttpContext.Response.Headers["Content-Length"] = new System.IO.FileInfo(filePath).Length.ToString();
    return PhysicalFile(Path.GetFullPath(filePath), QMimeTypeMap.GetMimeType(Path.GetExtension(filePath)));
}

Startup.cs &gt;配置

app.UseStaticFiles();
app.UseResponseBuffering();
app.UseMvc();

1 个答案:

答案 0 :(得分:0)

这似乎是BrowserLink中间件中的错误。 MS不久前对其进行了修补。阅读https://github.com/aspnet/Mvc/issues/5999上的完整主题。