有没有办法获得请求用户';ASP.NET web服务方法中的ID?

有没有办法获得请求用户';ASP.NET web服务方法中的ID?,asp.net,soap,Asp.net,Soap,我知道这可能是不可能的,但我希望能够从ASP.NET web服务方法中获取请求用户ID。到目前为止,我已经尝试了User.Identity.Name,Context.Request.LogonUserIdentity.Name,Request.ServerVariables[“AUTH\u User”]和Request.ServerVariables[“LOGON\u User”]。我在这里是在向风车倾斜,还是我遗漏了一些超级简单的东西?那么,你所说的用户ID是什么意思 如果他们已通过Windo

我知道这可能是不可能的,但我希望能够从ASP.NET web服务方法中获取请求用户ID。到目前为止,我已经尝试了
User.Identity.Name
Context.Request.LogonUserIdentity.Name
Request.ServerVariables[“AUTH\u User”]
Request.ServerVariables[“LOGON\u User”]
。我在这里是在向风车倾斜,还是我遗漏了一些超级简单的东西?

那么,你所说的用户ID是什么意思

如果他们已通过Windows身份验证进行身份验证,User.Identity将为您提供与该用户对应的WindowsIdentity对象

如果您希望与经过身份验证的用户相对应的用户ID“神奇地”显示在您的页面中,您也可以这样做!在您的Global.asax中,有一个名为Application_AuthenticateRequest的函数,您可以实现该函数来获取传递给应用程序的任何标识,并将其转换为可从页面访问的基于IPrincipal的对象

因此,在实现AuthenticateRequest()时,可以获取HttpContext.Current.User.Identity.Name,并使用它从数据库中查找用户ID。从这里,您可以构造自己的IPrincipal派生对象,并将HttpContext.Currrent.User引用设置为您创建的对象。然后,您可以将页面中的“用户”强制转换为您创建的对象并读取用户ID。我们一直都在这样做。下面是一些示例代码(它实际上缓存了主体对象,这样您就不必在每次请求时都访问数据库):


您的web服务是使用匿名禁用和windows集成安全设置的吗?您是指ASMX web服务、WCF web服务还是AJAX调用的ASP.NET页面方法?@Justin-ASMX,对不起,应该这么说,因为“ASP.NET web服务”暗示了这一点。@Otavio,我想您击中了它的头部。
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
        try {
            IIdentity myIdentity = HttpContext.Current.User.Identity;
            MyPrincipal myPrincipal = (MyPrincipal)HttpContext.Current.Cache[myIdentity.Name];

            if (myPrincipal == null) {
                    myPrincipal = (MyPrincipal)GetPrincipalFromDatabase(HttpContext.Current.User.Identity);
                    HttpContext.Current.Cache.Insert(myIdentity.Name, myPrincipal, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero);                
            }

            HttpContext.Current.User = myPrincipal;
        }
        catch (SecurityException) {
            HttpContext.Current.User = null;
        }
        catch (Exception ex) {
            Trace.WriteLine("Could not validate your user.");
        }
    }