Asp.net 如何在IIS 7.5经典模式下限制对静态文件的访问

Asp.net 如何在IIS 7.5经典模式下限制对静态文件的访问,asp.net,iis-7,static-content,Asp.net,Iis 7,Static Content,我需要在几个ASP.NET应用程序中限制对静态HTML文件的访问。由于这些应用程序实现了自己的身份验证机制,看起来我只需要让这些文件通过ASP.NET请求处理管道,而不是“标准”IIS静态内容处理。有些应用程序是相对现代的ASP.NET MVC应用程序,并在IIS 7.5上使用集成管道,看起来做我需要的事情并不是什么大不了的事。但另一些是在传统管道模式(IIS 7.5)下工作的传统ASP.NET网站,由于某些原因,目前无法将其移动到集成管道 UPD:问题在于,应用程序包含一些静态文件(帮助页面)

我需要在几个ASP.NET应用程序中限制对静态HTML文件的访问。由于这些应用程序实现了自己的身份验证机制,看起来我只需要让这些文件通过ASP.NET请求处理管道,而不是“标准”IIS静态内容处理。有些应用程序是相对现代的ASP.NET MVC应用程序,并在IIS 7.5上使用集成管道,看起来做我需要的事情并不是什么大不了的事。但另一些是在传统管道模式(IIS 7.5)下工作的传统ASP.NET网站,由于某些原因,目前无法将其移动到集成管道

UPD:问题在于,应用程序包含一些静态文件(帮助页面),未经授权的用户可以在键入直接URL时看到这些文件。在这种情况下,我的任务是让应用程序显示登录页面

将处理程序添加到Web.config中:

<add name="StaticHTMLHandler" path="*.htm*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv4.0,bitness32" />

那么我做错了什么?有人能告诉我正确的方法吗?

我从未尝试过你的方法,但我也有一些FW1.1,经典的asp。我的网络服务器上混合了现代网络应用。我要做的是为每个框架创建一个单独的应用程序池。我在我创建的1.1经典模式应用程序池上运行1.1,在另一个应用程序池上运行现代应用程序:integrated fw 4.0。经典的asp内容超出了这个问题的范围。每个应用程序池都是它自己的进程,因此使用更多的应用程序池没有真正的缺点,例如,每个应用程序1个应用程序池是一个完全可以接受的安全策略。

因此,最终没有找到使用经典管道模式对静态文件进行身份验证的实用方法。最后,我们决定更新旧的遗留平台,并使其在集成管道模式下工作。

当然,我们所有的应用程序都使用自己的应用程序池-每个应用程序一个,因此它们在不同的进程中运行。问题是,应用程序包含一些静态文件(帮助页面),未经授权的用户可以在键入直接URL时看到这些文件。在这种情况下,我的任务是让应用程序显示登录页面。
[HttpException (0x80004005): Failed to Execute URL]
    System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.BeginExecuteUrl(String url, String method, String childHeaders, Boolean sendHeaders, Boolean addUserIndo, IntPtr token, String name, String authType, Byte[] entity, AsyncCallback cb, Object state) +4136452
    System.Web.HttpResponse.BeginExecuteUrlForEntireResponse(String pathOverride, NameValueCollection requestHeaders, AsyncCallback cb, Object state) +653
    System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) +279
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +12551795
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288