1

[这是关于之前与计算机语言学家讨论的后续/清理问题,希望我对此进行了足够的说明] ImageResizer 是否可以在站点根目录之外获取文件并提供服务(从而避免使未更改的原件在线可用)?或者这种情况的最佳实践是什么?

*是否应该将原件存储在站点根目录之外,在线存储基本调整大小的图像(通过 url auth / httpmodule 等保护),然后让 Imageresizer 根据该图像动态调整拇指等的大小?据我所知,我还没有找到一种方法来限制对文件夹的 100% 访问,除非通过 imageresizer 请求。如果 ImageResizer 可以调整大小,用户似乎可以访问它。

*或者也许是一个解决方案,控制器提供原始图像,然后由 ImageResizer 处理。

主要目的:

  1. 能够完全自定义权限规则

  2. 能够以安全的方式提供服务(至少据我所知,未经更改的用户上传的图像不应直接在站点根目录下访问)。保留原件似乎是一种面向未来的策略。

  3. 能够利用 ImageResizer 即时调整大小的强大功能。

任何关于其他人如何实现这一点的意见也受到赞赏。

4

1 回答 1

1
  1. 将文件定位在站点根目录之外不会完成任何事情。您仍然必须将它们安装为虚拟文件夹,以便再次访问它们。
  2. MVC 的编写方式使得它在这里绝对没用 - 它会拖延直到 ProcessRequest 做任何事情。
  3. ImageResizer 与这个问题完全无关 - 它的行为类似于 StaticFileHandler 出于您的目的 - 您需要一个通用授权系统。
  4. ASP.NET URL 授权听起来可能不够复杂,无法满足您所需的复杂程度。

要完成自定义授权逻辑,您需要处理 HTTP 管道中的 AuthorizeRequest 事件并从头开始实现路径解析逻辑。您可以在 Global.asax.cs 中或通过实现 IHttpModule 来处理事件。

在 AuthorizeRequest 中,您可以在 ImageResizer 或任何其他 HttpModule 或 HttpHandler 看到它之前访问传入的路径和查询字符串数据,决定用户今天是否应该能够访问它,并让请求继续或抛出 HTTP 401 错误.

我建议使用 ILSpy 查看 System.Web.Security 中的 UrlAuthorizationModule。它只有几页代码,而且非常简单。

于 2012-08-06T02:25:48.357 回答