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)的用户。看起来唯一的方法是解析错误消息(