使用Server.Transfer时是否再次执行整个Asp.Net生命周期?

Mar*_*ker 5 c# asp.net

我知道Server.Transfer不会回程到请求客户端.

我无法学到的是,控制是否只是直接传递给您要传输的新请求处理程序,或者是否或者是否再次执行整个请求生命周期.

我假设使用传输URL再次执行整个生命周期,但想验证是这种情况.

Mar*_*ker 3

这是我通过实验发现的。

使用时Server.Transfer整个请求生命周期不会再次运行。

如果您编写自己的模块,将其挂接到请求生命周期中,并Server.Transfer从该模块调用,则请求生命周期的其余部分将被跳过,页面生命周期将立即开始。

完成传输页面生命周期后,请求生命周期将通过其拆卸事件恢复。请注意,用于拆卸事件的 HtppContext 将是您从中传输的原始 HtppContext。也就是说,URL 和 QueryString 值将与原始请求相同,而不是您转移到的页面的 URL 和 QueryString 值。

Server.TransferHttpContext.Request在您转移到的页面的页面生命周期期间,会修改对象以包含新的 URL 和 QueryString 信息。

如果您传输到的资源不是页面而是基于文本(例如something.xml),则该页面的内容将完全按原样返回,其编码设置为text/html。

如果您传输到的资源不是页面且不是基于文本的(例如,something.pdf),则将引发 HttpException 错误。即使您为此资源定义了自定义处理程序,也会发生这种情况。