我正在使用ASP.net MVC框架设计一个Web应用程序。我想使用Windows身份验证并使用角色管理器SQLRoleProvider执行角色检查。
如何确定当前登录用户的电子邮件地址?这甚至可能吗?
应用程序将部署在多域Intranet中,如果这很重要(我认为它确实如此)。
感谢您的帮助!
答案 0 :(得分:7)
以下是一些代码中的示例:
DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = string.Format("sAMAccountName={0}", _name);
SearchResult user = searcher.FindOne();
string emailAddr = user.Properties["mail"][0].ToString();
答案 1 :(得分:2)
您可以在Active Directory中查找用户的属性。这是一篇很棒的文章,解释了如何使用System.DirectoryServices和C#:
来做到这一点http://www.codeproject.com/Articles/6778/How-to-get-User-Data-from-the-Active-Directory
答案 2 :(得分:0)
asp.net会员服务数据库只是一个数据库,您可以直接执行查询。我不认为默认会员提供商有办法获取电子邮件地址。
答案 3 :(得分:0)
在MVC5应用程序中,给出如下所示的操作
public ActionResult Index()
{
string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
ViewBag.Name = name;
ViewBag.Email = uEmail(User.Identity.Name.Replace(@"YOURDOMAIN\", ""));
return View();
}
将 YOURDOMAIN 更改为您的域名。并给出如下给出的uEmail功能。同时添加使用 System.Security.Principal 和使用System.DirectoryServices 的引用。
private string uEmail(string uid)
{
DirectorySearcher dirSearcher = new DirectorySearcher();
DirectoryEntry entry = new DirectoryEntry(dirSearcher.SearchRoot.Path);
dirSearcher.Filter = "(&(objectClass=user)(objectcategory=person)(mail=" + uid + "*))";
SearchResult srEmail = dirSearcher.FindOne();
string propName = "mail";
ResultPropertyValueCollection valColl = srEmail.Properties[propName];
try
{
return valColl[0].ToString();
}
catch
{
return "";
}
}