0

我有一个网站,我从那里向办公室的成员发送邮件

此邮件有一个是否按钮。

单击是/否按钮我调用网络服务,我的是否链接看起来有点像这样

<a href="http://xxxxx/xxxxx/votCatWSer.asmx/takevotingOpt?yesNo=yes&sNo=1">yes</a>

现在用户,即我的办公室工作人员将登录他们的系统打开他们的 Outlook 找到此邮件,然后单击它。

他们点击后,我的网络服务中的 takevotingOpt 方法将被调用。在这种方法中,我想知道这个呼叫来自哪个用户。这样我就可以在数据库中维护记录,例如 xyz 用户投票是/否

比如说他们是我组织 A 和 B 的两个成员

A 的 windows loginId 是“ AaLoginId ”并且

B 的 windows loginId 是“ BbLoginId

A 和 B 都收到带有上述链接的邮件。当 A 单击是/否链接时,我的 Web 方法应该给我 A 的登录 ID,即“ AaLoginId ”。在我得到这个之后,我在我的数据库中输入了一个条目,因为 A 投了赞成票。

我已经在我的网络服务中尝试了以下事情来获取用户名,但没有用,请帮忙。

试过这个东西来获取Windows登录用户名。

        //string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
        //Uri uri = new Uri("http://tempuri.org/");
        //ICredentials credentials = CredentialCache.DefaultCredentials;
        //NetworkCredential credential = credentials.GetCredential(uri, "Ntlm");
        ////userName = credential.UserName;
        //userName = User.Identity.Name;
        //userName= System.Threading.Thread.CurrentPrincipal.Identity.Name;
        //userName = Context.Request.ServerVariables["LOGON_USER"].ToString();
        //userName = HttpContext.Current.User.Identity.Name.ToString();

我在我的 inetmgr 中进行了身份验证,并为我的托管 Web 服务启用了 Windows 身份验证,现在它可以执行我想要的操作(userName = User.Identity.Name;),但它会打开一个浏览器窗口并询问我不想要的 Windows 用户 ID 和密码它应该在没有登录窗口的情况下拿起。

请帮助或建议任何其他方法来实现这一目标。

4

2 回答 2

1

您需要为 web 服务和 IIS 打开 windows 身份验证,然后您应该能够查看请求对象以获取用户

于 2013-06-30T14:07:28.550 回答
0

利用Environment.UserName

这是 MSDN 文档。 http://msdn.microsoft.com/en-us/library/system.environment.username.aspx

编辑 - 要检索登录到当前系统的所有用户,请查看此问题/答案 -从服务中注销 Windows 中的交互式用户

它展示了一种使用 WMI 和通过系统 DLL 检索当前系统上登录用户列表的方法(可能包括也可能不包括服务帐户,我自己没有尝试过)。

编辑 - 使用集成安全性将适用于您想要实现的目标,但在大公司中设置可能有点棘手。为了摆脱登录提示,Internet Explorer 会自动验证“Intranet 区域”中的站点,但不会自动验证“Internet 区域”中的站点。确保您的 Web 服务 URL 是基于 Intranet 的,即http://myserver/不是基于 Internet 的 ie http://myserver.mycorp.com/,除非用户在同一个域中。如果不是,让用户将“*.mycorp.com”添加到 Intranet 区域。FireFox 具有类似的配置,其中特定站点必须是“受信任的”才能进行自动身份验证。

于 2013-06-29T10:49:36.603 回答