我开发了一个asp.net MVC 4项目。目前我计划访问Azure Graph API以获取AD用户数据(访问用户的导航属性,参考链接:Azure Rest API Reference)。
我已经检查过Azure AD Graph帮助程序库,但是使用这个我无法访问导航属性(即:访问用户的管理器属性)
感谢任何帮助。
答案 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
即可