我目前维护着一个遗留应用程序,我正努力让它更具可测性,因为我发布了新功能。该应用程序托管在IIS上,是.net 4.5上的WCF休息服务,它公开了几种不同的服务操作。在我试图让事情变得更好的过程中,我遇到了从context
获取用户名的问题。
我真的不知道应用程序中有这么多不同的上下文,特别是当你真正想要的是用户名或者只是伪造一些标题时。我目前所知道的三个是:
所有这三个都有关于MSDN的精彩文档,这就是我在上面的项目符号中发布相应链接的原因。因此,通过指导我的文档并没有比我迄今为止搜索到的更有用。
我的问题/问题有点相关,所以我把它编成一个。
我在https://stackoverflow.com/a/18777835/2262959处从这个简单的答案中了解到了WebOperationContext和HttpContext之间的真正区别(尽管他没有说明他从哪里得到这些信息,我相信它隐藏在msdn或个人经验的某处) 。
OperationContext
相关,从名称猜测,我有点觉得,我可以使用这个或其他两个来控制其他两个中的任何一个。 OperationContext
获取当前用户名或获取(甚至伪造)HttpRequest
标头?或者我是否总是必须依赖特定的一个来检索用户信息?FakeItEasy
)目前我的代码是这样的:
if (OperationContext.Current != null && OperationContext.Current.ServiceSecurityContext != null)
return OperationContext.Current.ServiceSecurityContext.WindowsIdentity;
if (HttpContext.Current == null) return WindowsIdentity.GetCurrent();
if (HttpContext.Current.User != null)
{
return HttpContext.Current.User.Identity as WindowsIdentity;
}
return WindowsIdentity.GetCurrent();
我希望这段代码能说清楚我为何如此困惑。我真的不知道要依赖什么来获取当前用户身份,从源存储库更改说明,有人提到HttpContext.Current
并不总是提取正确的用户,因此必须检查{{1} }。何时以及为何会发生这种情况?我不知道。
我很乐意甚至从书中读到它,但我真的不知道该依赖什么。