【问题标题】:Supporting byte ranges支持字节范围
【发布时间】:2014-02-18 17:16:01
【问题描述】:

我正在开发一个 ASP.NET 应用程序,该应用程序需要能够为包含范围请求的文件提供服务。 ASP.NET MVC 团队已经说过they won't support this within MVC,并建议使用 IIS 来提供静态文件。

这是我的问题。当用户提出请求时,他们不会在 URL 中包含任何直接映射到文件的识别信息。该请求可能类似于:http://whatever.com/Download?ID=TXlGaWxlLnhv34lk。在 MVC 中,我需要进行 Web 服务调用以将该 ID 解析为最终将位于网络共享上的文件。此外,我们有自己定制的授权机制,每个请求都必须经过我们才能为文件提供服务。

Tomasz Pęczek 实现了一个名为 RangeFileResult 的自定义 ActionResult,它似乎重新实现了 IIS 默认提供的那种范​​围请求支持。我试过使用它,它似乎工作......但我觉得应该有一种方法让 IIS 为我服务静态文件。

所以,最终,我想知道是否可以让 MVC 接收请求,进行身份验证和授权,将 ID 解析为网络共享上的文件路径,然后回退到 IIS 的静态文件处理程序以实际返回文件信息。

【问题讨论】:

    标签: c# asp.net asp.net-mvc iis


    【解决方案1】:

    是的,查找真实文件位置然后将用户重定向到该位置以下载文件当然很容易。但是,您真正的问题是静态文件的身份验证。你如何做到这一点取决于你的要求(即,他们是否应该在下载后继续访问?是否应该单独授权每个文件?还是访问所有文件?你是否需要做额外的工作,比如在之后将数据放入数据库下载完成...这里有很多变数。他们都提出了不同的解决方案。

    【讨论】:

    • 当您说“将用户重定向到该位置”时,您是什么意思?您是否设想用户的浏览器会被重定向到新页面?如果是这样,那不是我要找的。对文件的唯一访问应该是通过带有文档 ID 的 URL。至于授权,每次都需要检查,不管之前有没有下载过。授权是基于每个文件的,而不是基于每个目录的。之后我可能需要做一些额外的工作——比如将下载请求写入审计日志。
    • @Keith - 你的建议是不可能的。一旦您启动了 ASP.NET 处理程序,您就不能再让 IIS 处理任何事情。响应必须通过 asp.net 响应返回。获得本地 IIS 处理的唯一方法是让 IIS 处理请求,如果这样做,就不能让 asp.net 处理请求。
    • 谢谢,埃里克。虽然这不是一个解决方案,但它是一个答案!
    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多