【问题标题】:PreRequestHandlerExecute not called for redirected Pages重定向页面不调用 PreRequestHandlerExecute
【发布时间】:2014-09-05 11:22:05
【问题描述】:

使用 Global.asax 的 PreRequestHandlerExecute 动态处理主题。

当使用下面的时候,PreRequestHandlerExecute 只针对前一个页面执行,而不是现在加载的页面:

    Server.Transfer(~/Error.aspx", True)

这导致我的主题没有用于 Error.aspx 页面,因为 PreRequestHandlerExecute 没有为此页面处理。

有人知道为什么吗?似乎找不到任何答案。

问题也在这里,但未回答(4 岁):Why is PreRequestHandlerExecute not called after postback redirect?

更新:已阅读 Server.Transfer 继续当前请求,而诸如 Response.Redirect 之类的替代方案取消当前请求,并发出另一个请求。如果正在使用相同的请求,这是有道理的(因为我们已经为这个请求处理了事件)。在那种情况下......有什么可用的解决方法吗?

【问题讨论】:

    标签: asp.net vb.net iis


    【解决方案1】:

    答案在MSDN:

    Server.Transfer 可有效替代 Response.Redirect 方法。 Response.Redirect 指定给浏览器 请求不同的页面。因为重定向强制一个新页面 请求,浏览器向 Web 服务器发出两个请求,所以 Web 服务器处理一个额外的请求。 IIS 5.0 引入了一个新功能, Server.Transfer,将执行转移到不同的 ASP 页 服务器。这样可以避免额外的请求,从而获得更好的整体 系统性能,以及更好的用户体验。

    Server.Transfer 不会启动新的请求,因此不会执行 PreRequestHandlerExecute。如果您需要启动新请求,请使用 Response.Redirect。或者在另一个事件中设置页面中的主题(例如Page_PreInit)。

    【讨论】:

    • 我也是这么想的。太糟糕了,似乎没有实现修复每个页面的通用更改 - 幸运的是我只使用 Server.Transfer 访问一个页面,所以这个更改对我来说没问题。谢谢。在提出任何其他建议之前,我会暂时回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多