mlh*_*Dev 5 c# asp.net error-handling asp.net-mvc
我正在调试两件事,发现当执行操作时:
Server.TransferRequest(url);
return new EmptyResult();
Run Code Online (Sandbox Code Playgroud)
我Application_Error会触发并捕获异常“SessionStateTempDataProvider 类需要启用会话状态”。
(我确实启用了会话状态,特别是 StateServer,为了讨论起见,我们假设我不需要将此请求的更改提交回会话)
我想控制如何记录此场景。显然我可以检测异常类型和消息文本,但如果我不想在请求被.TransferRequest“d”(或.Transfer“d”)时进行特殊日志记录,我该怎么做?
我已经检查过了Response.IsRequestBeingRedirected——确实如此false。
每个 Server.Transfer 都会向堆栈添加一个不安全的请求完成调用,因此,如果有超过 1 个这样的调用,您可能会认为该请求是由 或Server.Transfer方法Server.TransferRequest之一在内部重定向的
这是一个布尔函数,您可以将其添加到 global.asax 文件中,如果在当前堆栈跟踪中找到多个请求完成帧实例,该函数将返回 true。
这new StackTrace()是一个昂贵的操作,但是,因为这是在异常上下文中执行的,所以它的开销“可能”被忽略。
private bool IsRequestTransferred()
{
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
int requestCompletionCount = 0;
foreach (var stackFrame in stackTrace.GetFrames())
{
System.Reflection.MethodBase methodBase = stackFrame.GetMethod();
if (methodBase.DeclaringType.Name == "UnsafeIISMethods" && methodBase.Name == "MgdIndicateCompletion")
{
if (++requestCompletionCount == 2)
{
return true;
}
}
}
return false;
}
void Application_Error(object sender, EventArgs e)
{
bool isRequestTransferred = IsRequestTransferred();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |