【问题标题】:IIS - Different processing of default document in Integrated Pipeline mode?IIS - 在集成管道模式下对默认文档的不同处理?
【发布时间】:2010-10-10 06:04:57
【问题描述】:

我有一个 HTTP 模块来处理来自 Facebook 的身份验证,它在经典管道模式下运行良好。

但是,在集成管道模式下,我看到一个额外的请求通过默认文档,这导致模块失败。我们查看请求(来自 Facebook)以检索和验证访问我们应用程序的用户。初始请求验证正常,但随后我看到 second 请求,该请求缺少发布的表单变量,因此导致验证失败。

在集成管道模式下,对“/”的 http 请求会连续产生 2 个 AuthenticateRequest:

  1. AppRelativeCurrentExecutionFilePath = "~/" 的请求
  2. AppRelativeCurrentExecutionFilePath = "~/default.aspx" 的请求

第二个请求丢失了所有表单值,因此它无法进行身份验证。在经典模式下,第二个请求是唯一发生的请求,它会保留表单值。

有什么想法吗?

更新:这是来自 IIS 中模块通知的跟踪图像。请注意,我的模块 FBAuth 多次看到 AUTHENTICATE_REQUEST(我希望有 2 个 - 一个用于身份验证,一个用于身份验证后,但我得到 4 个)。

我开始相信这与模块/过滤器配置有关,因为我发现一个运行相同代码的 (Vista) 框不会重复触发这些事件 - 它的行为符合预期。我正在努力找出差异可能是什么......

谢谢! 汤姆

【问题讨论】:

    标签: asp.net iis iis-7 httpmodule


    【解决方案1】:

    我的解决方案是在 Application_BeginRequest 的末尾添加以下代码:

    if (Request.RawUrl.TrimEnd('/') == HostingEnvironment.ApplicationVirtualPath.TrimEnd('/'))
        Server.Transfer(Request.RawUrl+"Default.aspx", true);
    

    【讨论】:

      【解决方案2】:

      不支持DefaultHttpHandler, 所以依赖子类的应用程序 DefaultHttpHandler 将无法 服务请求 如果您的应用程序 使用 DefaultHttpHandler 或处理程序 派生自 DefaultHttpHandler, 它不能正常工作。在 集成模式,handlers 派生自 DefaultHttpHandler 将无法 将请求传递回 IIS 处理,而是服务于 请求的资源作为静态文件。 集成模式允许 ASP.NET 模块 运行所有请求而不 要求使用 DefaultHttpHandler。

      解决方法

      更改您的应用程序以使用 执行请求处理的模块 对于所有请求,而不是使用 通配符映射将 ASP.NET 映射到所有 请求然后使用 DefaultHttpHandler 派生的处理程序 将请求传递回 IIS。

      嗯,或者这可能是问题所在。

      早期请求中的 ASP.NET 模块 处理阶段将看到请求 以前可能被拒绝的 在进入 ASP.NET 之前通过 IIS, 其中包括运行的模块 BeginRequest 查看匿名请求 对于需要的资源 身份验证 ASP.NET 模块可以运行 在任何流水线阶段 可用于本机 IIS 模块。 正因为如此,要求 以前可能已被拒绝 身份验证阶段(例如 对资源的匿名请求 需要认证)或其他 进入 ASP.NET 之前的阶段可能 运行 ASP.NET 模块。这种行为是 通过设计以启用 ASP.NET 在所有请求中扩展 IIS 的模块 处理阶段。

      解决方法

      更改应用程序代码以避免 任何特定于应用程序的问题 源于看到可能的请求 后来在请求期间被拒绝 加工。这可能涉及改变 订阅管道的模块 稍后引发的事件 请求处理。 http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/

      【讨论】:

      • 很好的链接,虽然我不相信我遇到任何这些问题。我正在使用模块,而不是处理程序,并且我正在监视的事件是身份验证事件。虽然这可能解释了为什么我会看到它两次,但它并不能解释为什么 http 信息会丢失(例如 form vars)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 2012-05-07
      相关资源
      最近更新 更多