0

我有一个自定义的重写模块,当特定的查询字符串参数通过时,我需要能够调用server.transfer而不是response.redirect由于保存软件和跟踪Server.Transfer不会触发应用程序生命周期事件

在RewriteModule的Init事件

我注册的事件:

的BeginRequest 的PreRequestHandlerExecute ReleaseRequestState

当一个Response.Redirect的被称为ReleaseRequestState事件实际上是调用和重写模块并发症ETE和新的控制URL的设置

当Server.Transfer方法被调用,然后不叫ReleaseRequestState事件和友好的URL没有设置

我想我明白一个Response.Redirect的和服务器之间的不同.Transfer,但我不明白为什么事件实际上不会被调用 - Session.End或Session.Abandon事件被调用,并且这个事件永远不会被解雇?或者是完全不同的东西在这里发生

感谢

保罗

回答

0

我猜这是两者之间的细微差别。

的Response.Redirect做一个客户端的重定向 - 这意味着客户端浏览器发送一条消息,告诉它来请求一个不同的URL,因此给你一个新的请求。

Server.Transfer的不创建一个新的请求(http://msdn.microsoft.com/en-us/library/y4k58xk7.aspx)。它只是停止在当前页面上工作,并开始在另一页上工作 - 没有新的请求。

+0

嗨感谢回去我 - 如果没有新的请求,那么它肯定会再继续拨打PostReleaseState eventrather不仅仅是查杀要求? – stack72 2010-07-26 12:54:16

+0

似乎应该。除非管道内部发生了一些魔法,才能知道国家是否被收购。如果没有获得状态(如.css请求),也许框架不会调用ReleaseRequestState。只是猜测 - 我不知道这个事实。 – PatrickSteele 2010-07-26 13:08:36

相关问题