2

我需要在几个 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

那么我做错了什么?谁能指出我正确的方法?

4

2 回答 2

0

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

于 2013-02-18T23:11:43.903 回答
0

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

于 2019-11-19T02:52:47.307 回答