我开发了一个asp.net MVC 4项目。目前我计划访问Azure图形API以获取AD用户数据(访问用户导航属性,Ref链接:Azure Rest API Reference)。Azure AD:如何在不使用任何库的情况下访问Azure AD图形API
我已经检查了Azure的AD图帮手图书馆,但使用这个我不能够访问导航属性格式(即:用户的访问管理器属性)
任何帮助表示赞赏。
我开发了一个asp.net MVC 4项目。目前我计划访问Azure图形API以获取AD用户数据(访问用户导航属性,Ref链接:Azure Rest API Reference)。Azure AD:如何在不使用任何库的情况下访问Azure AD图形API
我已经检查了Azure的AD图帮手图书馆,但使用这个我不能够访问导航属性格式(即:用户的访问管理器属性)
任何帮助表示赞赏。
您可以通过HttpClient或任何其他通用http请求生成类直接轻松地点击Graph。您只需坚持使用OData约定即可访问特定实体并过滤结果。 对于一些常见的查询,你可以直接尝试没有任何图库看看http://msdn.microsoft.com/en-us/library/azure/jj126255.aspx
默认情况下,当你得到一些实体(在我们的例子'用户')时,不会加载所有的导航属性。你应该使用Expand(..)。下面我举一个例子,如何来管理分配给用户,以及如何获得用户的经理导航属性(一些基础设施的细微差别省略):
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上被分配为管理员的用户,而不是管理员属性正在设置的用户(取自此source)