IIS虚拟目录

  • 本文关键字:虚拟 IIS asp.net iis
  • 更新时间 :
  • 英文 :


我尝试通过global.asax路由我的PDF文件以检查访问权限。

我在web.config中添加了以下内容:

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

<system.web>
  <httpHandlers>
    <add verb="GET" path="*.pdf" type="Pipeline.TimeHandler, Pipeline" />
  </httpHandlers>
</system.web>

除非我的文件位于IIS虚拟目录中,否则此操作正常。

请求的信息:

您使用的IIS版本是什么Microsoft IIS/7.5

您使用集成模式还是经典模式它在集成模式下运行。

请求是否会转移到您的处理程序我真的没有处理程序,我只是不想使用Integrated处理程序。

它是否运行Application_BeginRequest不,它甚至没有击中Application_BeginRequest

IIS中是否安装了任何非标准ISAPI模块不,我想不是。

我将web.config编辑为:

<system.webServer>
  <handlers>
     <add name="ScriptResource.axd_GET,HEAD" path="ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv2.0" />
     <add name="*_AppService.axd_*" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv2.0" />
     <add name="*.asmx_*" path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv2.0" />
      <add name="PdfHandler" verb="*" path="*.pdf" type="Pipeline.TimeHandler, Pipeline" />
    </handlers>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

我删除了httpHandlers,然后我得到了一个错误:

Could not load file or assembly 'Pipeline' or one of its dependencies. The system cannot find the file specified. 

所以我认为问题是`type="Pipeline.TimeHandler, Pipeline"不起作用。但是,我应该在那里配置什么来使用标准的IIS管道来执行Application_AuthenticateRequest

您正在混合集成模式和经典模式配置。您的IIS似乎是在集成模式下配置的(在system.webServer中有设置),而您是在经典模式(system.web)下注册HTTP处理程序。

尝试将其添加到您的系统.webServer配置部分:

<handlers>
  <add name="SampleHandler" verb="*" path="*.pdf" type="Pipeline.TimeHandler, Pipeline" />
</handlers>

如果这不是你的问题,请提供更多信息:

  • 您使用的IIS版本是什么
  • 您使用集成模式还是经典模式
  • 请求是否会转移到您的处理程序?它是否运行Application_BeginRequest
  • IIS中是否安装了任何非标准ISAPI模块

以及你能得到的任何其他有用的信息。

请注意,在经典模式下,您还必须设置ASP。NET ISAPI模块来处理所有请求(默认情况下,它只处理对*.aspx、*.asmx等的请求),或者至少添加*.pdf.

编辑:哦,所以你实际上没有自己的PDF处理程序?在这种情况下,您只需要确保对静态文件运行身份验证(runAllManagedModulesForAllRequests应该足够了),并且您必须确保用户确实需要一些权限来读取您的文件。您必须根据配置拒绝访问目录中的文件。例如,您可以将其添加到文件所在目录的web.config中:

<system.web>
    <authorization>
        <deny users="?" />
    </authorization>
</system.web>

这基本上是说:拒绝所有匿名(即未登录)用户访问。

从技术上讲,Luaan的回答是正确的。

在我的具体案例中,事实证明,虚拟目录是一个虚拟应用程序,它有自己的管道和一切。所以我只是删除它,并将其添加为虚拟目录,这正如预期的那样工作。

最新更新