对.net核心服务器的媒体范围请求失败

时间:2020-02-29 16:04:31

标签: javascript c# asp.net-core

在.NET Core中交付视频时遇到问题。我正在通过绝对路径获取视频文件,然后将其返回以用作元素中的源。 但是,我通过将enableRangeProcessing:true传递给该方法来启用HTTP Range请求,并且在快速搜索视频后(一旦加载),该动作将停止提供响应。 响应恰好包含16.1kb的数据,根本不包含任何响应预览或响应内容。

此后重新加载页面无济于事,唯一解决此问题的方法是重新构建并重新运行,或者有时,如果您稍等片刻(2-3分钟),则视频通常会在重新加载时加载。

最初加载视频(最好是较长的视频,我尝试显示的视频实际上是我的PC上的电影),然后尝试快速连续浏览视频时,通常会发生这种情况。 我在DevTools中看到大约100-150个请求(大多数已取消,但仍然被取消)。在那之后,请求停止响应电影的一部分。同样,这种情况并非每次都会发生,有时问题会在2-3分钟后消失。

Here's a link to a video capturing the issue。 如上所述,在停止录制正常加载的视频后大约3分钟。

有问题的动作

public IActionResult GetVideo(string path) {
    path = Uri.UnescapeDataString(path);
    return PhysicalFile(path, "application/octet-stream", enableRangeProcessing: true);
}

这是前端面

<video src="@Url.Action("GetVideo", "Home", new { path = ViewBag.Id })" controls></video>

path变量是我系统中绝对路径的URI转义字符串(出于调试目的,将来将通过ID进行访问。

尝试虚拟路径(将mp4文件放在wwwroot文件夹中)时,问题不再存在,但我希望能够从物理路径传递视频。

有人知道这是什么原因吗?

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的任何人:其结果实际上是ASP.NET Core 3.1中发现的一个错误,该错误可能使攻击者得以DDOS托管服务器。在版本3.1.6中已修复。