我知道Server.Transfer不会回程到请求客户端.
我无法学到的是,控制是否只是直接传递给您要传输的新请求处理程序,或者是否或者是否再次执行整个请求生命周期.
我假设使用传输URL再次执行整个生命周期,但想验证是这种情况.
这是我通过实验发现的。
使用时Server.Transfer整个请求生命周期不会再次运行。
如果您编写自己的模块,将其挂接到请求生命周期中,并Server.Transfer从该模块调用,则请求生命周期的其余部分将被跳过,页面生命周期将立即开始。
完成传输页面生命周期后,请求生命周期将通过其拆卸事件恢复。请注意,用于拆卸事件的 HtppContext 将是您从中传输的原始 HtppContext。也就是说,URL 和 QueryString 值将与原始请求相同,而不是您转移到的页面的 URL 和 QueryString 值。
Server.TransferHttpContext.Request在您转移到的页面的页面生命周期期间,会修改对象以包含新的 URL 和 QueryString 信息。
如果您传输到的资源不是页面而是基于文本(例如something.xml),则该页面的内容将完全按原样返回,其编码设置为text/html。
如果您传输到的资源不是页面且不是基于文本的(例如,something.pdf),则将引发 HttpException 错误。即使您为此资源定义了自定义处理程序,也会发生这种情况。