在 forums.asp.net 上问过这个问题,但没有人接受,所以我想我会在这里尝试。
我们有一个注册 BeginRequest、ReleaseRequestState 和 EndRequest 的 HttpModule。该模块的主要目的是,当我们提供常规 html 页面时,我们需要一个钩子来重写和加密生成的 html 中 href 上的查询字符串。过滤附加在我们模块的 ReleaseRequestState 事件处理程序中 (context.Response.Filter = new MyFilter(...);)。
但是当我们运行一个将生成 xml 文档的页面时,ReleaseRequestState 事件处理程序似乎根本不会触发 - 只有 BeginRequest 和 EndRequest。
经过大量谷歌搜索,我发现帖子说 HttpApplication.CompleteRequest() 将绕过很多事件链并直接转到 EndRequest,但我们没有在任何地方调用 CompleteRequest()。所以我在想还有其他的东西可以调用它,或者其他绕过 ReleaseRequestState 的方法。
当我们设置生成报告 xml 时,我们执行 Response.Clear(); 然后在 Response.OutputStream 上创建一个 XmlWriter。这些中的任何一个都会导致一些较低的东西绕过 ReleaseRequestState 事件吗?