3

最近,我将 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 崩溃。

有人能帮我吗?

4

4 回答 4

2

问题只是你的函数 Get_AD_User_Email(string username)是用一个空值调用的username

于 2013-04-05T13:56:24.737 回答
1

您更改了 IIS 服务器,现在调用方法没有传入用户名(正如其他几个答案所指出的那样)。

我将验证您是否在 IIS 中禁用了该网站上的匿名访问。发现启用了 Windows 身份验证和匿名访问是很常见的。发生这种情况时,首选匿名,您将无法获得用户名。

检查 HttpContext.Current.User 的值。我通常使用如下代码来验证 Windows 身份验证:

WindowsIdentity id = (WindowsIdentity)HttpContext.Current.User.Identity; 
string username = id.Name;
于 2013-04-05T17:33:44.547 回答
1

自从:

DirectorySearcher searcher = new DirectorySearcher("(&(objectCategory=person)(sAMAccountName=" + username + "))");

正在返回异常:

(&(objectCategory=person)(sAMAccountName=)) 搜索过滤器无效。

您将一个空字符串传递给Get_AD_User_Email.

您如何检索“用户名”?

于 2013-04-05T17:18:48.633 回答
-1

试试:objectClass=user

而不是:objectCategory=person

于 2013-04-04T17:24:43.427 回答