2011-02-14 73 views
0

我有一个ASP.NET应用程序,它使用nHibernate的IPreUpdateListener来记录审计报告。为了设置Listener事件中的当前用户,我使用了System.Security.Principal.WindowsIdentity.GetCurrent()。这在我的机器上调试时工作正常,但是当我将它移动到登台服务器时,我得到的是ASP.NET进程凭据,而不是请求用户。在请求范围之外检索Web用户的标识

在ASP.NET页面中,我可以使用Request.LogonUserIdentity(因为我使用集成身份验证而工作正常),但是如何直接引用此用户而不必将其直接传递给我的事件?我不想通过管道传递这些信息,因为它实际上不属于中间事件/调用。

回答

1

如果代码在ASP.NET上下文中执行,HttpContext.Current(静态)包含当前的Http上下文。你可以随时测试它是否为空。如果不为零,您将能够获得HttpContext.Current.Request

但是,驻留在此请求上下文中的标识最终取决于网站(IIS,Cassini,IIS Express或自定义)如何处理标识。

+0

完美。我花了一分钟才意识到我不得不在我的项目中添加对System.Web的引用,但现在一切都按预期工作! – Kendrick 2011-02-14 16:45:18