ASP.Net:Server.Transfer()导致HttpModule ReleaseRequestState处理程序没被调用?

时间:2014-02-02 22:10:52

标签: c# asp.net

我们有一个响应过滤器,旨在过滤查找网址的文本,以确保查询字符串已加密。我们有一个实现ReleaseRequestState处理程序的http模块,我们将过滤器附加到Response对象。

我们发现一个奇怪的地方,一个.aspx页面在同一个应用程序中对另一个执行Server.Transfer()会导致ReleaseRequestState处理程序永远不会被运行,因此我们的输出过滤器永远不会被附加。

设置早于我,所以我不知道为什么过滤器被连接在ReleaseRequestState中,但我很困惑为什么做一个Server.Transfer会导致该事件永远不会被触发。有人有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

Per MSDN,Server.Transfer在内部调用Response.End,它会跳过所有剩余的管道事件并直接跳转到EndRequest。

EndRequest确实是唯一保证在ASP.NET请求期间运行的管道事件(假设其包含模块在config中正确注册),因为每个其他事件都可以通过调用Response.End来绕过或者HttpApplication.CompleteRequest。

您可能希望考虑在管道中更早地挂接过滤器,以尽量减少其他组件跳过其调用的可能性。