【发布时间】:2019-11-02 17:51:31
【问题描述】:
我有这么简单的端点:
[HttpGet]
public IActionResult GetFileDirect()
{
var path = ...; // path to the file
return File(System.IO.File.OpenRead(path), "text/plain", true);
}
当前文件内容:
abcdefghijklmnopqrstuvwxyz
正如您在返回语句中看到的,我将 true 传递给 enableRangeProcessing。在单范围请求的情况下,它可以按预期工作:
curl -H Range:bytes=0-8 http://localhost:65318/api/File -i
回复如下:
HTTP/1.1 206 Partial Content
Content-Length: 9
Content-Type: text/plain
Content-Range: bytes 0-8/26
Accept-Ranges: bytes
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcY2ViaXlcRGVza3RvcFxSYW5nZVdlYlxSYW5nZVdlYlxhcGlcRmlsZQ==?=
X-Powered-By: ASP.NET
Date: Sat, 02 Nov 2019 17:46:49 GMT
abcdefghi
但是,在多范围请求的情况下,它不会考虑任何范围,并会返回带有文件全部内容的Ok 响应:
curl -H Range:bytes=0-8,12-15 http://localhost:65318/api/File -i
回复如下:
HTTP/1.1 200 OK
Content-Length: 26
Content-Type: text/plain
Accept-Ranges: bytes
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcY2ViaXlcRGVza3RvcFxSYW5nZVdlYlxSYW5nZVdlYlxhcGlcRmlsZQ==?=
X-Powered-By: ASP.NET
Date: Sat, 02 Nov 2019 17:49:37 GMT
abcdefghijklmnopqrstuvwxyz
【问题讨论】:
-
查看源代码以及它如何处理范围标头github.com/aspnet/AspNetCore/blob/master/src/Mvc/Mvc.Core/src/…
-
无法解析请求中的范围。
标签: c# asp.net-core curl .net-core http-range