ASP.Net绕过ReleaseStateRequest事件-如何



在forums.net上问过这个问题,但是没有人接受,所以我想我应该在这里试试。

我们有一个HttpModule注册BeginRequest, ReleaseRequestState和EndRequest。该模块的主要目的是,当我们提供常规html页面时,我们需要一个钩子来重写和加密生成的html中href上的查询字符串。过滤附加在模块(context.Response)的ReleaseRequestState事件处理程序中。Filter = new MyFilter(…);

但是当我们运行一个页面,它将产生一个xml文档,ReleaseRequestState事件处理程序似乎根本没有触发-只有BeginRequest和EndRequest。

经过大量的谷歌搜索,我发现帖子说HttpApplication.CompleteRequest()将绕过很多事件链并直接转到EndRequest,但我们无处调用CompleteRequest()。我在想在下面还有其他东西调用它,或者其他绕过ReleaseRequestState的方法。

当我们设置生成报告xml时,我们执行Response.Clear();然后在Response.OutputStream上创建XmlWriter。这两种情况中的任何一种会导致较低的东西绕过ReleaseRequestState事件吗?

因为您提供的是XML文档,所以ASP。. NET管道短路了——没有状态可以释放,因为没有aspx页面在执行使用它。

要解决这个问题,您可以做的是确保将会话状态表单变量与对XML文档的请求一起post。当框架看到该变量(和/或其他与状态相关的请求参数)时,它将执行完整状态的水合/脱水事件循环。

编辑:在进一步思考这个问题之后,我认为是对Response.Clear()的调用导致状态事件不触发。该方法将清除现有内容,包括请求中包含的状态变量。由于似乎您可能在BeginRequest事件处理程序中调用Response.Clear,因此在解析并在随后的事件中设置状态之前,将从请求中清除状态。因此,没有状态可以释放,事件调用将被跳过。

你有没有在ASP. js中下载/指向符号源?NET源代码和步骤通过的请求?这将有助于更好地回答这个问题。

相关内容

  • 没有找到相关文章

最新更新