0

Asp.net の MVC First Web API チュートリアルに従って、最初の MVC 4 アプリに取り組んでいます。名前はそのままに、モデルとコントローラ コードを変更しました。これが私のモデルです:

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

問題は、Web API 自体ではなく、dirEntry の処理にある可能性が高いです。これに LDAP を導入するのではなく、返されるダミー製品をたくさん作成するだけです。

参考までに... LDAP オブジェクトの使用にはメモリ リークの問題もあります。それらは、ハッピー パスに沿って、また例外がスローされた場合の両方で、適切に破棄する必要があります。

于 2012-11-20T17:47:40.473 に答える
0

私はアホです。「sid」は AD の正しいプロパティ名ではなく、「objectSid」であるため、常に null を返します。簡単なことだとわかった。

于 2012-11-26T16:10:58.153 に答える