防止 FileResult 分块响应
Prevent FileResult chunked response
我有一个 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 中的响应缓冲,但它对我不起作用。
此 returns 文件正确,但使用 Transfer-Encoding: Chunked
,导致下载以 "indeterminate" 形式出现,即没有进度条。我尝试自己设置 Content-Length
header,但它会自动删除。
编辑:请注意,如上所述,我已经尝试过响应缓冲。这没有解决我的问题。
编辑 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 > 配置
app.UseStaticFiles();
app.UseResponseBuffering();
app.UseMvc();
这似乎是 BrowserLink 中间件中的错误。不久前它被 MS 修补了。阅读 https://github.com/aspnet/Mvc/issues/5999 上的完整主题。
我有一个 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 中的响应缓冲,但它对我不起作用。
此 returns 文件正确,但使用 Transfer-Encoding: Chunked
,导致下载以 "indeterminate" 形式出现,即没有进度条。我尝试自己设置 Content-Length
header,但它会自动删除。
编辑:请注意,如上所述,我已经尝试过响应缓冲。这没有解决我的问题。
编辑 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 > 配置
app.UseStaticFiles();
app.UseResponseBuffering();
app.UseMvc();
这似乎是 BrowserLink 中间件中的错误。不久前它被 MS 修补了。阅读 https://github.com/aspnet/Mvc/issues/5999 上的完整主题。