Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在多用户系统的情况下,如何获取特定于用户的异常详细信息?_C#_Asp.net_Asp.net Mvc_Exception Handling - Fatal编程技术网

C# 在多用户系统的情况下,如何获取特定于用户的异常详细信息?

C# 在多用户系统的情况下,如何获取特定于用户的异常详细信息?,c#,asp.net,asp.net-mvc,exception-handling,C#,Asp.net,Asp.net Mvc,Exception Handling,假设一次在一个应用程序中有多个用户在线。由于某种原因,4个用户出现了异常。由于我们在global.asax文件中实现了全局异常处理,因此我们向所有用户显示一个自定义错误页面,并使用以下代码记录错误: var currentException = Server.GetLastError(); logger.LogDetails(currentException); // some logging code Server.ClearError(); 用户1收到被零除的异常 用户2获得无效的强制转换

假设一次在一个应用程序中有多个用户在线。由于某种原因,4个用户出现了异常。由于我们在global.asax文件中实现了全局异常处理,因此我们向所有用户显示一个自定义错误页面,并使用以下代码记录错误:

var currentException = Server.GetLastError();
logger.LogDetails(currentException); // some logging code
Server.ClearError();
  • 用户1收到被零除的异常
  • 用户2获得无效的强制转换异常
  • 用户3获得索引超出范围异常
  • 用户4得到了一些Sqlexception
  • 在这种情况下,这个Server.GetLastError()将返回什么? 另外,我需要记录异常。所以,我想将基于用户的异常记录为密钥,将异常详细信息记录为描述。因此,对于用户1,将有一个类似User=U1的日志条目,ExceptionDescription=“除以零”

    正如Steve在评论中所建议的,我可以使用HTTPContext获取当前用户,但仍然无法获取会话中发生的异常。我怎样才能做到这一点

    var currentException = Server.GetLastError();
    var user = HttpContext.Current.User;
    logger.LogDetails(currentException, user); // some logging code
    Server.ClearError();
    
    您可以在登录之前获取该用户,该用户将是错误的当前用户


    您可以在登录之前获取该用户,该用户将是错误的当前用户

    您似乎担心GetLastError会返回上次发生的任何错误,而不管用户是谁,如果四个用户出现错误,可能会出现串扰,他们可能会看到彼此的错误(或者日志代码可能会用错误的错误记录错误的用户名)。事实并非如此

    是特定于会话的,或者更准确地说,是特定于线程的。它将只返回由从当前线程接收响应的用户触发的错误

    GetLastError函数

    检索调用线程的最后一个错误代码值。最后一个错误代码以每个线程为基础进行维护。多个线程不会覆盖彼此的上一个错误代码


    因此,只要使用Steve的答案,您就可以开始了。

    您似乎担心GetLastError会返回上次发生的任何错误,而不管用户是谁,如果四个用户出现错误,可能会出现串扰,他们可能会看到彼此的错误(或者日志代码可能会用错误的错误记录错误的用户名)。事实并非如此

    是特定于会话的,或者更准确地说,是特定于线程的。它将只返回由从当前线程接收响应的用户触发的错误

    GetLastError函数

    检索调用线程的最后一个错误代码值。最后一个错误代码以每个线程为基础进行维护。多个线程不会覆盖彼此的上一个错误代码


    所以只要使用Steve的答案,你就可以开始了。

    所有4个,4次,然后我如何获得需要记录的特定于用户的异常详细信息?我想你可以检查httpcontext,看看哪个用户是它,但仍然是服务器。GetLastError不会返回非特定于当前用户的随机异常。我真的不理解你的问题。上下文将是当前用户,否则您将如何将正确的用户重定向到正确的错误屏幕所有4个,4次然后我如何获得用户特定的异常详细信息,我需要记录吗?我想您可以检查httpcontext以查看哪个用户是它,但仍然是服务器。GetLastError不会返回非特定于当前用户的随机异常。我不太理解您的问题。上下文将是当前的用户,或者以其他方式,你将如何将正确的用户重定向到正确的错误屏幕?所有你已经共享的链接都与C++相关,在我的例子中是C++。因此,只想确认C++中的相同或服务器,GETLASTReNORE()是否不同于C++的GETLASTORKECT函数?因此,只想确认C中的相同或服务器,GETLASTReNORE()是否不同于C++的GETLASTORKECT函数?