我看过
UserHttpClient
、ProfileHttpClient
和 GraphHttpClient
。
当我从工作项目(“分配给”字段)中获得
IdentityRef
时,我无法弄清楚如何从其中任何一个中检索电子邮件地址。
之前我假设
uniquename
字段始终是电子邮件地址,但前提安装似乎并非如此?
我终于明白了。
identityRef
包含一个名为Descriptor
的字段,它对应于ProfileHttpClient
(Rest api)中的“用户描述符”。
因此,要获取电子邮件,必须执行以下操作:
public static Task<string> GetEmailAddress(this VssConnection connection, SubjectDescriptor descriptor)
{
var client = connection.GetClient<GraphHttpClient>();
var user = await client.GetUserAsync(descriptor.ToString());
return user?.MailAddress;
}
// .. and in your code (where assignedTo is an IdentityRef).
var email = await connection.GetEmailAddress(assignedTo.Descriptor);
更新
这在 Azure DevOps Server 上不起作用,因为该图不可用。所以问题依然存在。
(将此作为云版本的答案)
我认为有一种方法可以做到这一点。您可以从
IdentityRef
获取“id”并执行以下其余 Api 调用
http://{服务器:端口}/tfs/{collection)/_apis/identities/{identityId}?api-version=6.0
这将返回 Identity 类型为
Identity
的对象(不是 IdentityRef)。该对象包含“属性”字段,请参考此属性字段中的“邮件”属性,您可以在其中找到电子邮件。