正在提交对使用函数中的块返回的DirectoryEntry的更改

本文关键字:返回 DirectoryEntry 函数 提交 | 更新日期: 2023-09-27 18:21:06

我想我将展示我对在c#中使用语句的无知。

我正在尝试编写一个函数,该函数接受active directory中用户的唯一标识符并返回该用户。然后我想对用户进行更改并提交它们。

我怀疑这不起作用,因为我正在使用区块中返回。

以下是基本思想:

public static DirectoryEntry GetADUser( string prop1Value, string prop2Value )
{
    using( var rootDE = new DirectoryEntry(LDAPPath, User, Password))
    {
        using( var searcher = new DirectorySearcher(rootDE))
        {
            searcher.Filter = string.Format("(&(prop1={0})(prop2={1}))", prop1Value, prop2Value);
            var user = searcher.FindOne().GetDirectoryEntry();
            return user;
        }
    }
}
//...
var user = GetADUser("val1","val2");
user.Properties["prop3"].Value = "Spagetti";
user.CommitChanges();

这样行吗?active directory似乎并没有以这种方式显示我所做的更改。在调用提交更改时,我没有得到任何异常。

这与:使用block从内部返回可以吗?当';return';从';使用';块

如果它不能以这种方式工作,那么如果我在不使用块的情况下重写那个函数,它会有多糟糕?

正在提交对使用函数中的块返回的DirectoryEntry的更改

将您的用户声明为using块之外的SearchResult,然后将其分配到using(var searcher….)块中,然后将返回语句放在using块结束后

SearchResult user = null;
using( var rootDE = new DirectoryEntry(LDAPPath, User, Password))
{
    using( var searcher = new DirectorySearcher(rootDE))
    {
        searcher.Filter = string.Format("(&(prop1={0})(prop2={1}))", prop1Value, prop2Value);
        var user = searcher.FindOne().GetDirectoryEntry();

    }
}
return user;

您还可以通过使用块更改搜索器来简化一些事情

using (var searcher = new DirectorySearcher(rootDD, string.Format("(&(prop1={0})(prop2={1}))", prop1Value, prop2Value))
{
    user = searcher.FindOne();
}

不要硬编码Value Spagetti如果用户。属性["prop3"]。给出值并尝试出错

 (string)user.Properties["prop3"] = some variable if it's type is a string or 
  user.Properties["prop3"].Value = someVariable.ToString() 

如果它是一个被转换为整数的整数,这有意义吗。。?如果用户不在提交方面的using内部,您将无法访问该用户。。所以在using..中移动提交。。