【问题标题】:Application Lifecycle Event Not Fired when Server.TransferServer.Transfer 时未触发应用程序生命周期事件
【发布时间】:2010-07-26 12:30:58
【问题描述】:

我有一个自定义重写模块,当传递特定的查询字符串参数时,我需要能够调用 server.transfer 而不是 response.redirect,因为 adserve 软件和跟踪

在 RewriteModule 的 Init 事件中,我注册了事件:

开始请求 PreRequestHandlerExecute 发布请求状态

当调用 Response.Redirect 时,ReleaseRequestState 事件被实际调用,重写模块完成,新的控制 URL 被设置

当调用 Server.Transfer 时,不会调用 ReleaseRequestState 事件,也不会设置友好 URL

我想我理解 Response.Redirect 和 Server.Transfer 之间的区别,但我无法弄清楚为什么实际上没有调用该事件 - 是 Session.End 还是 Session.Abandon 事件被调用,而这个事件永远不会被触发?还是这里发生了完全不同的事情

谢谢

保罗

【问题讨论】:

    标签: c# response.redirect server.transfer application-lifecycle


    【解决方案1】:

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

    Response.Redirect 进行客户端重定向——这意味着客户端浏览器会收到一条消息,告诉它请求不同的 URL,从而给你一个新的请求。

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

    【讨论】:

    • 您好,感谢您回复我 - 如果没有新请求,那么它肯定会继续调用 PostReleaseState 事件,而不是仅仅终止请求?
    • 似乎应该如此。除非管道内部有一些魔法可以知道是否获得了状态。如果没有获取任何状态(例如 .css 请求),则框架可能不会调用 ReleaseRequestState。不过只是推测——我不知道这是事实。
    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多