【问题标题】:Change file root for StaticFileHandler更改 StaticFileHandler 的文件根目录
【发布时间】:2011-12-20 09:24:32
【问题描述】:

我有一个 ASP.NET Web 项目(除其他外)提供一些静态文件。默认情况下,框架假定所有文件路径都相对于 Web 项目的位置。但是,我希望从 Web.config 中的自定义设置(例如 "C:\MyStaticFiles\")加载实际的根目录。

有什么方法可以改变StaticFileHandler 认为的服务器根目录? 如果没有,是否有一种简单的方法来实现 IHttpHandler 以进行此更改并将其余工作移交给常规的 StaticFileHandler

【问题讨论】:

    标签: c# asp.net staticfilehandler


    【解决方案1】:

    出于性能原因,最好使用 URL 重写而不是乱用 HttpHandler。 StaticFileHandler 不如 IIS 快。您自己的处理程序将比 StaticFileHandler 慢 10 倍,除非您是一个非常非常优秀的工程师,否则它可能会泄漏(或错误地占用)内存。

    您可以在 HttpModule 或 HttpApplication 的 BeginRequest 事件(或 PostAuthorizeEvent,如果您使用 URL 授权)中调用 context.RewritePath 来对选择的文件类型进行重写。

    【讨论】:

    • 如何使用 URL 重写来更改提供文件的根文件夹?此文件夹位于 Web 项目文件夹之外。 context.RewritePath 仍然采用虚拟路径——如果你尝试给它一个绝对路径,它会抛出一个错误。有没有类似的东西可以让我改变绝对物理路径?
    • 不,您必须将 IIS 虚拟文件夹配置到物理路径,然后使用 RewritePath 将 IIS 指向那里。对不起,我忘了提。
    【解决方案2】:

    我认为,出于性能原因,为静态资源创建不同的路径映射并不是一个好主意。如果它们位于网站文件夹中,它们可以由 IIS 直接提供服务,而无需任何 ASP.NET 处理。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 2014-08-11
      • 2014-11-30
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2014-05-09
      • 2012-04-26
      • 2019-03-23
      相关资源
      最近更新 更多