最近,我将ASP.NET应用程序从运行IIS5的旧服务器移动到运行IIS7.5的新服务器。
该应用程序给我一个错误:
(&(objectCategory = person)(sAMAccountName =))搜索过滤器无效。
描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.ArgumentException:(&(objectCategory = person)(sAMAccountName =))搜索过滤器无效。
搜索AD的功能是:
public static string Get_AD_User_Email(string username)
{
try
{
DirectorySearcher searcher = new DirectorySearcher("(&(objectCategory=person)(sAMAccountName=" + username + "))");
SearchResult result = searcher.FindOne();
if (result != null)
{
DirectoryEntry employee = result.GetDirectoryEntry();
if (employee.Properties["mail"] != null)
{
return employee.Properties["mail"].Value.ToString();
}
else return "NULL";
}
else throw new Exception("ERROR: Problem searching active directory for users.");
}
catch (Exception ex) { throw ex; }
}
奇怪的是,在Visual Studio中调试网站正在运行,只有从IIS崩溃才能运行。
有人可以帮助我吗?
答案 0 :(得分:2)
问题在于您的函数Get_AD_User_Email(string username)
使用username
的空值进行调用。
答案 1 :(得分:1)
自:
DirectorySearcher searcher = new DirectorySearcher("(&(objectCategory=person)(sAMAccountName=" + username + "))");
返回异常:
(&(objectCategory = person)(sAMAccountName =))搜索过滤器是 无效。
您正在将空字符串传递给Get_AD_User_Email
。
您如何检索“用户名”?
答案 2 :(得分:1)
您更改了IIS服务器,现在调用方法没有传递用户名(正如其他几个答案所指出的那样)。
我会验证您是否在IIS中的该网站上禁用了匿名访问。通常会发现启用Windows身份验证和匿名访问。如果发生这种情况,则首选匿名,您将无法获得用户名。
检查HttpContext.Current.User的值。我通常使用下面的代码来验证Windows身份验证:
WindowsIdentity id = (WindowsIdentity)HttpContext.Current.User.Identity;
string username = id.Name;
答案 3 :(得分:-1)
尝试: 的objectClass =用户
而不是: objectCategory =人