Azure DevOps Rest API 如何获取工作项中被分配用户的显示名称
从Azure DevOps工作项System.AssignedTo字段提取显示名称方案
字段返回规则
Azure DevOps .NET SDK 调用
GetWorkItemAsync接口默认返回的System.AssignedTo字段为格式化字符串,结构固定为{显示名称} <{用户注册邮箱}>,例如李明 <liming@corp.com>;若工作项未分配处理人,该字段不会出现在返回的Fields集合中。
实现代码
你可以直接对拿到的字段值做字符串拆分获取显示名称,调整后的代码如下:
// Get client VssConnection connection = GetVssConnection(_azureDevopsOptions); WorkItemTrackingHttpClient workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>(); // Define fields string startDateField = "Microsoft.VSTS.Scheduling.StartDate"; string finishDateField = "Microsoft.VSTS.Scheduling.FinishDate"; string assignedToField = "System.AssignedTo"; // 指定需要查询的字段,减少接口返回数据量提升性能 var requiredFields = new List<string> { startDateField, finishDateField, assignedToField }; // Get work item var workitemTask = await workItemTrackingHttpClient.GetWorkItemAsync(taskId, requiredFields); // Get fields from work item // 注意:日期字段默认值不要设置为0,避免类型转换错误,建议设置为DateTime.MinValue或null var startDate = workitemTask.Fields.ContainsKey(startDateField) ? workitemTask.Fields[startDateField] : DateTime.MinValue; var finishDate = workitemTask.Fields.ContainsKey(finishDateField) ? workitemTask.Fields[finishDateField] : DateTime.MinValue; var assignedTo = workitemTask.Fields.ContainsKey(assignedToField) ? workitemTask.Fields[assignedToField]?.ToString() : null; // 提取显示名称逻辑 string assignedDisplayName = string.Empty; if (!string.IsNullOrWhiteSpace(assignedTo)) { int separatorIndex = assignedTo.IndexOf('<'); if (separatorIndex > 0) { // 拆分取<符号前的内容,去除首尾空格即为显示名称 assignedDisplayName = assignedTo.Substring(0, separatorIndex).Trim(); } else { // 兼容无邮箱后缀的特殊场景 assignedDisplayName = assignedTo.Trim(); } }
特殊场景说明
如果你调用GetWorkItemAsync时添加了expand: WorkItemExpand.Fields参数,接口返回的System.AssignedTo会是IdentityRef类型对象,直接取其DisplayName属性即可:
if (assignedTo is IdentityRef identityRef) { assignedDisplayName = identityRef.DisplayName; }
内容的提问来源于stack exchange,提问作者Harold G
相关产品推荐
相关产品推荐

