2

我有一个 asp.net 网络表单,我将其发布到没有文件名的“/”url,它被传输到默认文档 (index.aspx)。在Classic托管管道模式下运行应用程序池 (.net v4.0) 时,表单值可用于接收页面。在Integrated模式下运行时,表单值对页面不可用。

在发布到使用默认文档的 URL 时,如何在集成模式下维护表单集合?

当直接发布到“/index.aspx”时,只有 1 个请求并且表单值被保留。
发布到“/”时,有 2 个请求。我相信一个由 处理DefaultDocumentModule,第二个由页面类(ASP.index_aspx)处理。

有一个不同的处理程序/模块以集成模式处理第二个请求,我无法识别。

我试图在Application_EndRequest活动期间识别它:

void Application_EndRequest(object sender, EventArgs e)
{
    HttpApplication app = ((HttpApplication)sender);
    int fieldCount = Request.Form.Count; // there are 5 fields in my POST
    var handler = app.Context.Handler;
}

结果:

邮政 '/'

  • 经典模式 EndRequest 1
    处理程序:ASP.index_aspx (System.Web.UI.page)
    fieldCount: 5

  • 经典模式 EndRequest 2
    处理程序:System.Web.DefaultHttpHandler
    fieldCount:5

表单集合用于页面。

  • 集成模式 EndRequest 1
    处理程序:ASP.index_aspx (System.Web.UI.page)
    fieldCount: 0

  • 集成模式 EndRequest 2
    handler: null
    fieldCount: 5

表单集合不可用于页面。

哪个本机模块/处理程序正在处理第二个请求?

**更新: **

我找到了为什么我丢失了表单集合的答案。“在 IIS 7 或 IIS 7.5 集成模式下的默认文档中可能不会引发事件处理程序”。FormControlAdapter那里给出的解决方案运行良好。

但是,我仍然无法识别正在处理请求并删除已发布表单集合的模块/处理程序。我怀疑ExtensionlessUrlHandler-Integrated-4.0但无法验证。使用该Application_EndRequest事件,没有给我关于模块的信息,高级日志也不提供关于模块管道的信息。

4

0 回答 0