我正在调试两件事,发现当执行某个动作时:
Server.TransferRequest(url);
return new EmptyResult();
我的Application_Error
将触发并捕获异常“SessionStateTempDataProvider类需要启用会话状态。”
(我确实启用了会话状态,特别是StateServer,为了便于讨论,让我们假设我不需要将此请求的更改提交回会话)
我想控制如何记录此方案。显然我可以检测到异常类型和消息文本,但是如果我想不在请求为.TransferRequest
'd(或.Transfer
'd)时进行特殊记录,我可以这样做吗?
我已经检查了Response.IsRequestBeingRedirected
- 它是false
。
答案 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);