0

我正在开发我的第一个 MVC 4 应用程序,遵循 Asp.net 上的 MVC First Web API 教程。我保留了相同的名称,但更改了模型和控制器代码。这是我的模型:

public class Product
{
    public string SID { get; set; }
    public string name { get; set; }
    public string givenName { get; set; }
    public string sn { get; set; }
    public string mail { get; set; }
    public string telephoneNumber { get; set; }
    public string mobile { get; set; }
    public string otherMobile { get; set; }
    public string title { get; set; }
    public string Manager { get; set; }
    public DateTime whenChanged { get; set; }
}

public class ProductModel
{
    public ProductModel()
    {
        ProductList = new List<Product>();
    }
    public IList<Product> ProductList { get; set; }
}

这是我的 API 控制器:

 public class ProductsController : ApiController
{
    ProductModel products = new ProductModel();

    public IEnumerable<Product> GetAD()
    {
        DirectoryEntry domainRoot = new DirectoryEntry(LDAP_server);
        DirectorySearcher searcher = new DirectorySearcher(searchStr);
        SearchResultCollection results = searcher.FindAll();
        foreach (SearchResult srchResult in results)
        {
            DirectoryEntry dirEntry = srchResult.GetDirectoryEntry();
            if (dirEntry.Properties["givenName"].Value != null && dirEntry.Properties["sn"].Value != null && !dirEntry.Parent.Name.Contains("Terminated"))
            {
                products.ProductList.Add(new Product()
                {
                    SID = dirEntry.Properties["sid"].Value.ToString(),
                    name = dirEntry.Properties["name"].Value.ToString(),
                    givenName = dirEntry.Properties["givenName"].Value.ToString(),
                    sn = dirEntry.Properties["sn"].Value.ToString(),
                    mail = dirEntry.Properties["mail"].Value.ToString(),
                    telephoneNumber = dirEntry.Properties["telephoneNumber"].Value.ToString(),
                    mobile = dirEntry.Properties["mobile"].Value.ToString(),
                    otherMobile = dirEntry.Properties["otherMobile"].Value.ToString(),
                    title = dirEntry.Properties["title"].Value.ToString(),
                    Manager = dirEntry.Properties["Manager"].Value.ToString(),
                    whenChanged = Convert.ToDateTime(dirEntry.Properties["whenChanged"].Value.ToString()),
                });
            }
        }
        return products.ProductList;
    }
}

我在 'products.ProductList.Add(new Product()' 上收到 NullException,我是否遗漏了一些简单的东西?请原谅我的编码,因为我只是想启动并运行它,谢谢。

4

2 回答 2

0

问题很可能是处理 dirEntry,而不是 Web API 本身。与其将 LDAP 引入其中,不如创建一堆虚拟产品来返回。

仅供参考...使用 LDAP 对象也存在内存泄漏问题。无论是沿着幸福的道路还是抛出异常,都需要正确处理它们。

于 2012-11-20T17:47:40.473 回答
0

我是个白痴。'sid' 不是来自 AD 的正确属性名称,它是 'objectSid',因此总是返回 null。我知道这很简单。

于 2012-11-26T16:10:58.153 回答