确定调用应用程序的用户上下文。

时间:2018-04-09 18:05:46

标签: c# asp.net winforms

我有一个可重用的数据访问组件,正在Winform应用程序和Web应用程序中使用。部分模块需要记录对数据进行任何更改的用户。即CreatedBy或ModifiedBy

如果该组件被严格用于Winform访问,我可以使用WindowsIdentity.GetCurrent()。Name来获取当前用户的名称,如果该组件仅在Web应用程序中使用,我可以使用HttpContext来获取使用名称。

我想要做的是使组件足够灵活,以便在两种情况下都可以使用它。那么如何检测调用该组件的应用程序类型,以便我可以检查用户名的结果上下文?

1 个答案:

答案 0 :(得分:1)

您始终可以查看ERROR [main] 2018-04-09 18:19:25,014 CassandraDaemon.java:675 - Exception encountered during startup java.lang.AbstractMethodError: org.apache.cassandra.utils.JMXServerUtils$Exporter.exportObject(Ljava/rmi/Remote;ILjava/rmi/server/RMIClientSocketFactory;Ljava/rmi/server/RMIServerSocketFactory;Lsun/misc/ObjectInputFilter;)Ljava/rmi/Remote; at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:150) ~[na:1.8.0_162] at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:135) ~[na:1.8.0_162] at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:405) ~[na:1.8.0_162] at org.apache.cassandra.utils.JMXServerUtils.createJMXServer(JMXServerUtils.java:104) ~[main/:na] at org.apache.cassandra.service.CassandraDaemon.maybeInitJmx(CassandraDaemon.java:139) [main/:na] at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:183) [main/:na] at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:569) [main/:na] at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:658) [main/:na] 是否存在。如果它没有(HttpContext),则表示您没有运行网络应用程序。

HttpContext.Current = null

另一种方法是使用当前线程的主体,如果你正在设置它(你应该):

var httpContext = HttpContext.Current;
var userName = (httpContext == null) 
             ? WindowsIdentity.GetCurrent().Name 
             : httpContext.User.Identity.Name;