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