显示Active Directory C#中的thumbnailPhoto

时间:2014-08-20 19:11:06

标签: c# asp.net active-directory ldap

使用C#MVC 5从搜索中的活动目录中提取数据。其中一个我需要它来拉缩略图照片。

所以我的LD​​AP连接抓取了初始数据,并成功地将缩略图转换为byte [],至少从调试看起来是这样。然后,当我尝试将字节数组转换为图像时,我得到一个"参数无效"错误。

这是我的控制器:

  [HttpPost]
public ActionResult Index(string userName, string searchFilter)
{
    /**********Establish Connection********/
    DirectoryEntry dir = createDirectoryEntry();
    DirectorySearcher search = new DirectorySearcher(dir);
    /****Refer to class constructor****/


    /********Create the List to store results in***************/
    List<ADUser> Users = new List<ADUser>();
    string DisplayName = "", SAMAccountName = "", Mail = "", Description = "", Department = "", TelephoneNumber = "", Fax = "";
    byte[] ThumbnailPhoto;
    string searchFilters = searchFilter.ToString();
    /*******Filter parameters************/
    if (searchFilters == "1")
    {
        search.Filter = "(&(objectCategory=Person)(objectClass=User)(&(anr=" + userName + "* )(displayName=*)(sn=*)))";
        //(&(department=" + userName + "* )(displayName=*)(sn=*))(&(telephoneNumber=" + userName + " )(displayName=*)(sn=*))
    }
    else if (searchFilters == "2")
    {
        search.Filter = "(&(objectCategory=Person)(objectClass=User)(&(department=" + userName + "* )(displayName=*)(sn=*)))";
    }
    else if (searchFilters == "3")
    {
        search.Filter = "(&(objectCategory=Person)(objectClass=User)(&(telephoneNumber=" + userName + "* )(displayName=*)(sn=*)))";
    }
    SearchResultCollection searchresult = search.FindAll();
    search.PropertiesToLoad.Add("Displayname");
    search.PropertiesToLoad.Add("SAMAccountName");
    search.PropertiesToLoad.Add("Mail");
    search.PropertiesToLoad.Add("Description");
    search.PropertiesToLoad.Add("TelephoneNumber");
    search.PropertiesToLoad.Add("Fax");
    search.PropertiesToLoad.Add("Department");
    search.PropertiesToLoad.Add("thumbnailPhoto");
    /*****************Filtering and populating the List****************/

    if (searchresult != null)
    {
        foreach (SearchResult iResult in searchresult)
        {
            ADUser userAttributes = new ADUser("", "", "", "", "", "", "", null);

            foreach (string PropertyName in iResult.Properties.PropertyNames)
            {
                foreach (Object key in iResult.GetDirectoryEntry().Properties[PropertyName])
                {
                    try
                    {


                        switch (PropertyName.ToUpper())
                        {
                            case "DISPLAYNAME":
                                DisplayName = key.ToString();
                                userAttributes.Name = DisplayName;
                                break;

                            case "SAMACCOUNTNAME":
                                SAMAccountName = key.ToString();
                                userAttributes.DomainUserName = SAMAccountName;
                                break;

                            case "MAIL":
                                Mail = key.ToString();
                                userAttributes.EmailAddress = Mail;
                                break;

                            case "DESCRIPTION":
                                Description = key.ToString();
                                userAttributes.JobDescription = Description;
                                break;

                            case "TELEPHONENUMBER":
                                TelephoneNumber = key.ToString();
                                userAttributes.TelephoneNumber = TelephoneNumber;
                                break;

                            case "FAX":
                                Fax = key.ToString();
                                userAttributes.FaxNumber = Fax;
                                break;

                            case "DEPARTMENT":
                                Department = key.ToString();
                                userAttributes.Department = Department;
                                break;

                            case "THUMBNAILPHOTO":
                                BinaryFormatter bf = new BinaryFormatter();
                                MemoryStream ms = new MemoryStream();
                                bf.Serialize(ms, key);

                                ThumbnailPhoto = ms.ToArray();
                                userAttributes.ThumbnailPhoto = ThumbnailPhoto;
                                break;
                        }
                    }
                    catch
                    {

                    }
                }
            }

            Users.Add(userAttributes);
        }

        return View(Users);
    }

    return View();
}

我的构造函数:

public class ADUser
    {
        private string name;
        private string domainUserName;
        private string emailAddress;
        private string jobDescription;
        private string telephoneNumber;
        private string faxNumber;
        private string department;
        private byte[] thumbnailPhoto;

        public ADUser(string name, string domainUserName, string emailAddress, string jobDescription, string telephoneNumber, string faxNumber, string department, byte[] thumbnailPhoto)
        {
            this.name = name;
            this.domainUserName = domainUserName;
            this.emailAddress = emailAddress;
            this.jobDescription = jobDescription;
            this.telephoneNumber = telephoneNumber;
            this.faxNumber = faxNumber;
            this.department = department;
            this.thumbnailPhoto = thumbnailPhoto;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public string DomainUserName
        {
            get { return domainUserName; }
            set { domainUserName = value; }
        }

        public string EmailAddress
        {
            get { return emailAddress; }
            set { emailAddress = value; }
        }

        public string JobDescription
        {
            get { return jobDescription; }
            set { jobDescription = value; }
        }

        public string TelephoneNumber
        {
            get { return telephoneNumber; }
            set { telephoneNumber = value; }
        }

        public string FaxNumber
        {
            get { return faxNumber; }
            set { faxNumber = value; }
        }

        public string Department
        {
            get { return department; }
            set { department = value; }
        }

        public byte[] ThumbnailPhoto
        {
            get { return thumbnailPhoto; }
            set { thumbnailPhoto = value; }
        }

现在是我的观点;

@model List<webby.Helpers.ADUser>
@using System.Drawing;
@{
    ViewBag.Title = "Directory";
}

<div class="container">
    <div class="col-md-7 col-md-offset-3">
        <h3>Directory</h3>
        <p>
            Here you will be able to search through the directory to find people that you are looking for.
            You can search by the person's name, their department or by their location.
        </p>
        <p>
            For a printable version please <a href="/Content/PDF/internal_telephone_directory.pdf" target="_blank">click here.</a>
        </p>

        @using (Html.BeginForm("Index", "Directory", FormMethod.Post))
        {
            <p>
                Search Employee: @Html.TextBox("userName")<br />
                <input type="radio" name="searchFilter" id="rdUser" value="1" checked />
                By User
                @*<input type="radio" name="searchFilter" id="rdDept" value="2" />
                    By Department
                    <input type="radio" name="searchFilter" id="rdExt" value="3" />
                    By Extension<br />*@
                <input type="submit" value="Search" class="btn btn-default" />
            </p>
        }

        @using (Html.BeginForm("Index", "Directory", FormMethod.Get))
        {
            <p>
                <input type="submit" value="Clear" class="btn btn-default" />
            </p>
        }


        <table class="table">
            @if (Model != null)
            {
                foreach (var item in Model)
                {
                    <tr onmouseover="this.style.backgroundColor = '#f3f3f3';" onmouseout="    this.style.backgroundColor = '#fff';">
                        <td>
                            @Html.DisplayFor(modelItem => item.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.TelephoneNumber)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.EmailAddress)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Department)
                        </td>
                        <td>
                            @if (item.ThumbnailPhoto != null)
                            {

                                using (MemoryStream s = new MemoryStream(item.ThumbnailPhoto))
                                {
                                    s.Seek(0, SeekOrigin.Begin);
                                    Bitmap.FromStream(s);
                                }

                            }
                        </td>
                        @*<td>
                                @Html.ActionLink("Details", "Details")
                            </td>*@
                    </tr>
                }
            }
        </table>

    </div>

</div>

任何想法都会非常感激。干杯

编辑:它的十六进制格式为0x00,这与它有什么关系吗?enter image description here

0 个答案:

没有答案