Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用.Net客户端SDK从Microsoft Graph获取我所属的管理员角色?_C#_Microsoft Graph Api_Microsoft Graph Sdks - Fatal编程技术网

C# 如何使用.Net客户端SDK从Microsoft Graph获取我所属的管理员角色?

C# 如何使用.Net客户端SDK从Microsoft Graph获取我所属的管理员角色?,c#,microsoft-graph-api,microsoft-graph-sdks,C#,Microsoft Graph Api,Microsoft Graph Sdks,我知道如何使用下面的rest查询获取按类型筛选的成员目录角色: https://graph.microsoft.com/v1.0/me/memberOf/$/microsoft.graph.directoryRole 因此,来自MS Graph api的响应只包含directoryRole对象。不确定如何使用MS Graph.Net客户端SDK实现这一点,因为我们没有在实际的Rest请求中指定任何OData关键字,如Select或Filter 请注意,我不想在客户端的内存中仅调用memberO

我知道如何使用下面的rest查询获取按类型筛选的成员目录角色:

https://graph.microsoft.com/v1.0/me/memberOf/$/microsoft.graph.directoryRole
因此,来自MS Graph api的响应只包含directoryRole对象。不确定如何使用MS Graph.Net客户端SDK实现这一点,因为我们没有在实际的Rest请求中指定任何OData关键字,如Select或Filter


请注意,我不想在客户端的内存中仅调用memberOf并筛选directoryRole类型响应,我希望此筛选器与上面的URL一样成为查询的一部分,因此memberOf response仅包含directoryRole s。

Graph Net客户端不直接支持您的要求

但根据我的测试,我们可以尝试以下解决方法:

使用以下代码获取具有DirectoryRole的列表,然后按DisplayName筛选,然后从Me.MemberOf检查DirectoryRole的角色模板IDF。如果DisplayName包含Administrator,则基本上我们是admin角色。如果使用DirectoryRoles api,我们可以迭代列表并检查角色模板id:

Me.MemberOf的结果: DirectoryRoles的结果:

如果解决方案仍然不能满足您的要求,我建议您在和上提交功能请求

补充答覆: 不幸的是,在MicrosoftGraph中,目录资源的过滤通常非常有限。因此,您可以立即使用客户端内存过滤器或提交功能请求:

理论上,我们可以像这样使用RESTAPI。当前不支持引用属性查询的指定筛选器

在基于图形客户端的C代码中

List<QueryOption> options = new List<QueryOption>
                {
                    new QueryOption("$filter", 
                      "groupTypes/any(a:roleTemplateId eq  '62e90394-69f5-4237-9190-012177145e10'")
                };   
IUserMemberOfCollectionWithReferencesRequest builder = graphClient.Me.MemberOf.Request(options); 

                    IGraphServiceDirectoryRolesCollectionRequest request = graphClient.DirectoryRoles.Request(options);

对于SDK,过滤是应用于对象的函数。例如:

var users = await graphClient
    .Users
    .Request()
    .Filter("startswith(displayName,'A')")
    .GetAsync();
不幸的是,这对您没有帮助,因为/memberOf不支持$filter。因此,您需要在客户机上进行过滤

如果你正在检查一个特定的,你可以从另一个方向来。终结点不支持按成员id进行筛选:


这里需要注意的是/members不支持按userPrincipalName进行筛选,只有通过实际id。

是否有其他方法可以使用RoleTemplateId从memberOf response中筛选特定的directoryRole?我认为RoleTemplateId可以用于筛选memberOf和DirectoryRoleSitating在列表上或通过LINQ的结果。除了RoleTemplateId的方法还需要测试如果你发布了一个使用RoleTemplateId进行过滤的工作示例,我会接受这个答案。现在是我们的周六,我会在周一回到办公室后做。我应该在大约20小时后回到我的办公室,最早是今天晚上。
List<QueryOption> options = new List<QueryOption>
                {
                    new QueryOption("$filter", 
                      "groupTypes/any(a:roleTemplateId eq  '62e90394-69f5-4237-9190-012177145e10'")
                };   
IUserMemberOfCollectionWithReferencesRequest builder = graphClient.Me.MemberOf.Request(options); 

                    IGraphServiceDirectoryRolesCollectionRequest request = graphClient.DirectoryRoles.Request(options);
var users = await graphClient
    .Users
    .Request()
    .Filter("startswith(displayName,'A')")
    .GetAsync();
v1.0/directoryRoles/{role-id}/members?$filter=id eq '{user-id}'