我需要在多个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" />
导致我刚得到这个例外:
[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
所以我在做什么错?有人可以指出我正确的方法吗?
我从未尝试过您的方法,但是我也有一些FW 1.1,经典的asp。和现代Web应用程序混合在我的Web服务器上。我要做的是为每个框架创建一个单独的应用程序池。我在创建的1.1经典模式应用程序池上运行1.1,并在另一个应用程序池上运行现代应用程序:集成的fw 4.0。经典的ASP东西超出了这个问题的范围。每个应用程序池都是它自己的过程,因此使用更多应用程序池并没有真正的弊端,例如,每个应用程序一个应用程序池是一个完全可以接受的安全策略。
因此,最终没有找到使用经典管道模式将身份验证引入静态文件的实用方法。最后,我们决定更新旧版旧平台,并使其与集成管道模式一起使用。