【问题标题】:how to write httphandler to only intercept files in a specific folder如何编写httphandler仅拦截特定文件夹中的文件
【发布时间】:2014-06-01 21:32:04
【问题描述】:

我已经编写了一个 httphandler 来拦截来自特定文件夹的所有 pdf 文件请求,并将用户重定向到登录页面。如果用户通过身份验证,则可以下载文件。我的 web.config 有以下拦截条目

<httpHandlers>
 <add verb="*" path="/calderdale/*.pdf"
   type="NES.HiLo.Security.CalderDaleAuthenticationHandler, NES.HiLo.Security" />
</httpHandlers>

在 IIS (6.0) 应用程序扩展设置中,我添加了一个带有可执行文件 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 和扩展名 Pdf 的设置。

这可行,但每个 pdf 文件请求都会被拦截,而不是 calderdale 目录中存在的文件。

我已经尝试过此链接Mapping specific folder to HttpHandler in web.config 上给出的解决方案,并删除了应用程序扩展设置,但处理程序确实得到了调用。

有什么想法吗?

【问题讨论】:

  • 你可以使用httpModule代替httpHandler。
  • 我不能使用 httpmodules,因为我们只能使用 httphandler 通过处理程序来保护文件。例如无论 httpmodule 是否存在,www.domainname.com/foldername/somefile.doc 都会打开该文件
  • @Learner 您提供的链接说要在文件夹中放置另一个 web.config 文件,您拥有 path="/calderdale/*.pdf" 的事实表明您没有完成公认的答案说要做,即将 web.config 放在文件夹 'calderdale' 中并将路径更改为 path="*.pdf"
  • @Learner 是否还映射了 IIS6 来处理通配符扩展? love2dev.com/#!article/… ... 通过告诉 aspnet_isapi 处理 .pdf ASPNET 将处理所有 pdf '查询'... ALL

标签: c# asp.net .net iis-6 httphandler


【解决方案1】:

将此添加到您的主网络配置中:

<location path="static">
  <system.web>
    <httpHandlers>
      <add verb="GET,HEAD" path="*.*" 
          type="NES.HiLo.Security.CalderDaleAuthenticationHandler, NES.HiLo.Security" />
    </httpHandlers>
  </system.web>    
</location>

【讨论】:

    【解决方案2】:

    我认为这里的技巧是只为该特定目录注册 HttpHandler。这可以通过将 system.web/httpHandlers 内容移动到 web.config 中的位置节点来完成。例如:

    <location path="calderdale">  
    
    ( system.web/httpHandlers content )
    
    </location>
    

    【讨论】:

      【解决方案3】:

      为什么你需要这样做?仅使用 ASP.NET 提供程序并使用所需的登录名保护此文件夹不是更容易吗?具有访问/拒绝逻辑的简单 webconfig 将解决您的问题。当有人试图浏览该目录时,将无法下载该文件并将被重定向到登录页面。如果我误解了什么,请告诉我。

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 2014-10-21
        • 1970-01-01
        相关资源
        最近更新 更多