Получение данных из Active Directory с помощью react и ASP. NET Core - PullRequest
0 голосов
/ 28 мая 2020

Может ли кто-нибудь поделиться кодом для получения сведений о пользователе вместе с миниатюрным изображением, которое будет отображаться на основе ввода SamAccountName?

Это должно быть выполнено с помощью ASP. NET Core и реагировать. Я новичок в этих технологиях, пожалуйста, помогите.

Мои испытания, как показано ниже

Код контроллера:

public Image ourTeam()
    {
        var userDetails = db.users.Where(x=>x.saMAccountName == "someUsername").FirstOrDefault();

        Image image = GetImage(userDetails.CN); //I get image data
        //context.Response.ContentType = "image/jpeg";

        var stream = new System.IO.MemoryStream();

        if (image != null)
            image.Save(stream, ImageFormat.Jpeg);

        return image;
    }

Код компонента:

import * as React from 'react';

import { RouteComponentProps } from 'react-router';

interface FetchImageDataState {
imageList: ImageData[];
loading: boolean;
}

export class OurTeam extends React.Component<RouteComponentProps<{}>, FetchImageDataState> {
constructor() {
    super();
    this.state = { imageList: [], loading: true }; //initialize to default

    fetch('api/Home/ourTeam')
        .then(response => response.json() as Promise<ImageData[]>)
        .then(data => {
            this.setState({ imageList: data, loading: false });
        });
}

    public render() {

    let contents = this.state.loading
        ? <p><em>Loading...</em></p>
        : this.renderImageTable(this.state.imageList);
    return <div>
        <h1>Team</h1>


        {contents}
    </div>;
}

private renderImageTable(imageList: ImageData[]) {
    return <div className='table'>{
        imageList.map(x =>
            <img src={x.byteData} alt={x.CN} />)
    }</div>;


}
}

export class ImageData {
CN: string = "";
byteData: string = "";
}

PFB код того, как я аутентифицирую, а затем получаю изображение:

private Image GetImage(string cn)
    {
        string LDAP_PATH = "LDAP://" + "SOMEPATH.com";
        string user = "USERID";
        string password = "PASSWORD";
                    using (DirectoryEntry entry = new DirectoryEntry(LDAP_PATH, user, password))
        {
            {
                DirectorySearcher search = new DirectorySearcher(entry);
                search.PropertiesToLoad.Add("sAMAccountName");
                search.PropertiesToLoad.Add("distinguishedName");
                search.Filter = "(&(objectClass=user)(sAMAccountName=" + cn + "))";
                SearchResult result = search.FindOne();
                if (result == null)
                {
                    search.Filter = "(&(objectClass=user)(cn=" + cn + "))";
                    result = search.FindOne();
                }

                if (result != null)
                {
                    DirectoryEntry entryUser = result.GetDirectoryEntry();
                    string propertyName = "thumbnailPhoto";
                    if (entryUser.Properties.Contains(propertyName))
                    {
                        byte[] img = entryUser.Properties[propertyName].Value as byte[];
                        MemoryStream memStream = new MemoryStream(img);
                        return Image.FromStream(memStream);
                    }
                }
            }
        }

        // User not authenticated
        return null;
    }

1 Ответ

0 голосов
/ 29 мая 2020

Я полагаю, вы хотите вернуть изображение, как если бы вы только что загружали файл.

Сначала верните byte[] из GetImage. Вы ничего здесь не получите, преобразовав его в объект Image. Если вам нужно было отредактировать изображение в коде, это имело бы смысл. Но поскольку это не так, это не имеет значения.

Так что измените это:

byte[] img = entryUser.Properties[propertyName].Value as byte[];
MemoryStream memStream = new MemoryStream(img);
return Image.FromStream(memStream);

На это:

return entryUser.Properties[propertyName].Value as byte[];

Затем в вашем контроллере верните a FileContentResult, вот так:

public ActionResult ourTeam()
{
    var userDetails = db.users.Where(x=>x.saMAccountName == "someUsername").FirstOrDefault();

    byte[] image = GetImage(userDetails.CN);

    return File(image, "image/jpeg");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...