Azure AD:如何在不使用任何库的情况下访问Azure AD Graph API

时间:2014-06-21 16:30:26

标签: c# asp.net asp.net-mvc-4 azure adal

我开发了一个asp.net MVC 4项目。目前我计划访问Azure Graph API以获取AD用户数据(访问用户的导航属性,参考链接:Azure Rest API Reference)。

我已经检查过Azure AD Graph帮助程序库,但是使用这个我无法访问导航属性(即:访问用户的管理器属性)

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

默认情况下,当您获得某个实体时(在我们的情况下为“User”),并不会加载所有导航属性。你应该使用Expand(..)。下面我举例说明如何将Manager分配给用户以及如何获取用户的管理器导航属性(省略一些基础结构细微差别):

public async Task<Result> AssingUserManager(string userUpn, string managerUpn)
{
    try
    {
        var user = (AD.User)await ADClient.Users
            .Where(x => x.UserPrincipalName == userUpn)
            .ExecuteSingleAsync();

        var manager = (AD.User)await ADClient.Users
            .Where(x => x.UserPrincipalName == managerUpn)
            .ExecuteSingleAsync();

        user.Manager = manager;

        await manager.UpdateAsync();
        return Result.Ok();
    }
    catch (Exception ex)
    {
        return Result.Fail(new Error("Failed to assign manager", null, ex));
    }
}

public async Task<Result<User>> GetUserManager(string upn)
{
    try
    {
        var user = (AD.User)await ADClient.Users
                    .Where(x => x.UserPrincipalName == upn)
                    .Expand(x => x.Manager)
                    .ExecuteSingleAsync();

        var manager = user.Manager as AD.User;
        if (manager != null)
        {
            return Result.Ok(ConvertToModel(manager));
        }

        return Result.Fail<User>(new Error("Manager not found for specified user", null));
    }
    catch (Exception ex)
    {
        return Result.Fail<User>(new Error("Failed to get user's manager", null, ex));
    }
}

另外,请注意,当我更新图表时,我会通过调用被指定为管理员的用户的UpdateAsync而不是正在设置Manager属性的用户(取自此source

答案 1 :(得分:0)

您可以通过HttpClient或任何其他通用http请求生成类直接轻松访问图表。您只需要坚持使用OData约定来访问特定实体并过滤结果。 对于某些常见查询,您可以直接尝试,无需任何图谱库,只需查看http://msdn.microsoft.com/en-us/library/azure/jj126255.aspx

即可