要按照公司名称筛选Active Directory用户,您可以使用Asp.net Core 2.1和System.DirectoryServices命名空间中的相关类。以下是一个简单的代码示例:
using System.DirectoryServices;
public class ActiveDirectoryHelper
{
private readonly string _domainPath;
public ActiveDirectoryHelper(string domainPath)
{
_domainPath = domainPath;
}
public SearchResultCollection GetUsersByCompany(string companyName)
{
using (var directoryEntry = new DirectoryEntry(_domainPath))
{
using (var directorySearcher = new DirectorySearcher(directoryEntry))
{
directorySearcher.Filter = $"(&(objectCategory=user)(company={companyName}))";
directorySearcher.PropertiesToLoad.Add("givenName"); // 用户名
directorySearcher.PropertiesToLoad.Add("sn"); // 姓氏
directorySearcher.PropertiesToLoad.Add("mail"); // 邮箱
return directorySearcher.FindAll();
}
}
}
}
using Microsoft.AspNetCore.Mvc;
using System.Linq;
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly ActiveDirectoryHelper _activeDirectoryHelper;
public UsersController()
{
// 请将"LDAP://yourdomain.com"替换为您的Active Directory域路径
_activeDirectoryHelper = new ActiveDirectoryHelper("LDAP://yourdomain.com");
}
[HttpGet("{companyName}")]
public IActionResult GetUsersByCompany(string companyName)
{
var searchResults = _activeDirectoryHelper.GetUsersByCompany(companyName);
var users = searchResults.Cast()
.Select(result =>
{
var firstName = result.Properties["givenName"]?.Count > 0 ? result.Properties["givenName"][0].ToString() : "";
var lastName = result.Properties["sn"]?.Count > 0 ? result.Properties["sn"][0].ToString() : "";
var email = result.Properties["mail"]?.Count > 0 ? result.Properties["mail"][0].ToString() : "";
return new
{
FirstName = firstName,
LastName = lastName,
Email = email
};
})
.ToList();
return Ok(users);
}
}
现在,您可以通过向以下URL发送GET请求来按照公司名称检索Active Directory用户:/api/users/{companyName}。将{companyName}替换为您要筛选的公司名称。
请注意,您需要替换代码中的"LDAP://yourdomain.com"为您的Active Directory域路径,并根据需要添加其他属性到directorySearcher.PropertiesToLoad。此示例仅加载了用户名(givenName)、姓氏(sn)和邮箱(mail)属性。
上一篇:按照公平原则执行任务