如何编写httphandler只截取特定文件夹中的文件

时间:2014-04-17 14:33:18

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

我编写了一个httphandler来拦截来自特定文件夹的URL的所有pdf文件请求,并将用户重定向到Login页面。如果用户已通过身份验证,则可以下载该文件。我的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上提供的解决方案,并删除了应用程序扩展设置,但处理程序确实接到了调用。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

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

<location path="calderdale">  

( system.web/httpHandlers content )

</location>

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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