确定是否已执行Server.Transfer [Request]

时间:2015-11-24 15:01:23

标签: c# asp.net asp.net-mvc error-handling

我正在调试两件事,发现当执行某个动作时:

Server.TransferRequest(url);
return new EmptyResult();

我的Application_Error将触发并捕获异常“SessionStateTempDataProvider类需要启用会话状态。”

(我确实启用了会话状态,特别是StateServer,为了便于讨论,让我们假设我不需要将此请求的更改提交回会话)

我想控制如何记录此方案。显然我可以检测到异常类型和消息文本,但是如果我想在请求为.TransferRequest'd(或.Transfer'd)时进行特殊记录,我可以这样做吗?

我已经检查了Response.IsRequestBeingRedirected - 它是false

2 个答案:

答案 0 :(得分:1)

每个Server.Transfer都会向堆栈添加一个不安全的请求完成调用,因此,如果有多个这样的调用,您可能会认为该请求是由Server.Transfer或{{}之一内部重定向的。 1}}方法

这是一个布尔函数,您可以将其添加到global.asax文件中,如果它在当前堆栈跟踪中找到多个请求完成帧实例,则返回true。

Server.TransferRequest是一项昂贵的操作,但是,因为这是在Exceptional上下文中执行的,所以它的开销“可能”会被忽略。

new StackTrace()

答案 1 :(得分:1)

Server.TransferRequest 接受标头集合。您可以添加一个特殊的技术标题,然后稍后再查找。

Server.TransferRequest(url,
    true,
    method: "GET",
    headers: new NameValueCollection() { { "transferred", "true" } });

//and then
bool isTransferred = (Request.Headers["transferred"] != null);