2014-02-18 119 views
0

我正在开发一个ASP.NET应用程序,它需要能够服务包含范围请求的文件。 ASP.NET MVC团队曾表示they won't support this within MVC,并建议使用IIS来提供静态文件。支持字节范围

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

TomaszPęczek实现了一个名为RangeFileResult的自定义ActionResult,它似乎正在重新实现IIS默认做的范围请求支持。我试过使用它,它似乎工作......但我觉得应该有办法让IIS为我服务的静态文件。因此,最终,我想知道是否有可能让MVC接收请求,验证&授权,将ID解析为网络共享上的文件路径,然后退回到IIS的StaticFile处理程序以实际返回文件信息。

回答

0

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

+0

当你说“重定向用户到那个位置”,你是什么意思?你是否设想用户的浏览器是真的重定向到一个新的页面?如果是这样,这不是我要找的。唯一的访问文件应该通过带有文档ID的URL 只要授权,它需要检查每一次,不管它是否已经被下载过,授权是基于每个文件的,而不是基于每个目录的,我可能需要额外的之后工作 - 例如将下载请求写入审计日志。 – Keith

+0

@凯斯 - 你的建议是不可能的。一旦你开始ASP.NET处理程序,你不能再有IIS处理任何东西。响应必须通过asp.net响应返回。获得本地IIS处理的唯一方法是让IIS处理请求,如果你这样做,你不能让asp.net处理请求。 –

+0

谢谢,Erik。虽然这不是一个解决方案,但它是一个答案! – Keith