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

标签 c# asp.net

我知道 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/

相关文章:

c# - C# Windows 7 App System.DllNotFoundException 上的 AutoIt (AutoItX)

c# - 确定共享主机中 asp.net 缓存使用的内存

asp.net - 基于 web.config 的 url 重写的绝对最小内容是什么?

jquery - 防止XSS攻击

c# - C#中的继承问题

c# - .Net 增加了我的开发时间——我是不是遗漏了什么?

c# - AsyncContext -> AsyncContextThread 处理异常

c# - 在 FormView 中找不到控件?

c# - 在 ASP.Net 中发送电子邮件的最低限度

javascript - JQuery 不调用 asp.net mvc 中的 Controller