C# 如何从异常中获取LDAP错误代码

C# 如何从异常中获取LDAP错误代码,c#,asp.net-mvc,exception,ldap,C#,Asp.net Mvc,Exception,Ldap,我使用DirectoryEntry 我的问题如果有一些错误,我必须知道错误代码 我的代码: var domain = WebConfigurationManager.AppSettings["ONLINE-AD"]; var directoryEntry = new DirectoryEntry("LDAP://" + domain); directoryEntry.Username = model.userName; directoryEntry.Password = model.passw

我使用
DirectoryEntry

我的问题如果有一些错误,我必须知道错误代码

我的代码:

var domain = WebConfigurationManager.AppSettings["ONLINE-AD"];

var directoryEntry = new DirectoryEntry("LDAP://" + domain);
directoryEntry.Username = model.userName;
directoryEntry.Password = model.password;

var directorySearcher = new DirectorySearcher(directoryEntry);

try
{
    var f = directorySearcher.FindOne();
    result = true;
}
catch (Exception ex)
{
    result = false;
}
当我在这里缝代码时:


我怎样才能把它取出来呢?

你应该可以用一些正则表达式来匹配它。例如:

catch (DirectoryServicesCOMException ex)
{
    Regex reg = new Regex(@"^(.*data )(?<ecode>\d*)");
    if(reg.IsMatch(ex.ExtendedErrorMessage))
    {
        GroupCollection groups = reg.Match(ex.ExtendedErrorMessage).Groups;
        errorCode = groups["ecode"].Value;
    }
}
catch(directoryservicescomeexception-ex)
{
正则表达式reg=新正则表达式(@“^(.*data)(?\d*)”;
if(注册IsMatch(例如ExtendedErrorMessage))
{
GroupCollection groups=reg.Match(例如ExtendedErrorMessage).groups;
errorCode=组[“ecode”]。值;
}
}
正则表达式可能会简化一点,但基本上它正在寻找

  • 行的开头-
    ^
  • 在“data”之前的任意字符数,并将其放入第一组-
    (*data)
  • 任意数量的数字,然后将其放入名为ecode-
    (?\d*)

这只会在所有错误消息都具有相同格式的假设下起作用。

您应该能够将其与某些正则表达式匹配。例如:

catch (DirectoryServicesCOMException ex)
{
    Regex reg = new Regex(@"^(.*data )(?<ecode>\d*)");
    if(reg.IsMatch(ex.ExtendedErrorMessage))
    {
        GroupCollection groups = reg.Match(ex.ExtendedErrorMessage).Groups;
        errorCode = groups["ecode"].Value;
    }
}
catch(directoryservicescomeexception-ex)
{
正则表达式reg=新正则表达式(@“^(.*data)(?\d*)”;
if(注册IsMatch(例如ExtendedErrorMessage))
{
GroupCollection groups=reg.Match(例如ExtendedErrorMessage).groups;
errorCode=组[“ecode”]。值;
}
}
正则表达式可能会简化一点,但基本上它正在寻找

  • 行的开头-
    ^
  • 在“data”之前的任意字符数,并将其放入第一组-
    (*data)
  • 任意数量的数字,然后将其放入名为ecode-
    (?\d*)

这仅在假设所有错误消息的格式相同的情况下才有效。

看起来无法从DirectoryServicesCOMException的数值参数中获取原始LDAP错误代码,因为

您可以获得下一个:

var hresult=-2147023570;//->0x8007052e
//0x8007052e是“提供的LDAP\u凭据无效\u凭据无效。”
var win32errorCode=(ushort)(0xFFFF&hresult);//-->1326
//1326是“错误\登录\失败用户名或密码不正确。”

列表。

您似乎无法从DirectoryServicesCOMException的数值参数中获取源LDAP错误代码,因为

您可以获得下一个:

var hresult=-2147023570;//->0x8007052e
//0x8007052e是“提供的LDAP\u凭据无效\u凭据无效。”
var win32errorCode=(ushort)(0xFFFF&hresult);//-->1326
//1326是“错误\登录\失败用户名或密码不正确。”

列表。

但我尝试登录一个用户,该用户必须第一次重置密码(错误代码773),而不是52e(1326)。看来获得密码的唯一方法是解析错误消息;(但我尝试登录一个必须第一次重置密码(错误代码773)而不是52e(1326)的用户。看起来唯一的方法是解析错误消息(