如何用C#永久删除Azure DevOps测试用例?
解决Azure DevOps测试用例工作项永久删除的问题
测试用例本质是Azure DevOps的工作项类型之一,不能通过_apis/test/testcases端点执行删除操作,这个端点不支持DELETE方法,这就是你收到「The provided HTTP Verb is not supported on this controller.」错误的原因。正确的做法是使用工作项跟踪(WIT)的删除API端点,同时指定destroy=true参数来完成永久删除。
修正后的RestSharp代码示例
// 替换为你的组织、项目和工作项ID string orgName = "YourOrgName"; string projectName = "YourProjectName"; int workItemId = 1234; string personalAccessToken = "YourPAT"; // 正确的API端点:使用WIT工作项删除接口 string apiUrl = $"https://dev.azure.com/{orgName}/{projectName}/_apis/wit/workitems/{workItemId}?api-version=7.0&destroy=true"; // 初始化RestClient和RestRequest RestClient client = new RestClient(apiUrl); RestRequest request = new RestRequest(Method.Delete); // PAT需要进行Base64编码(格式为 :{PAT}) string encodedPat = Convert.ToBase64String(Encoding.ASCII.GetBytes($":{personalAccessToken}")); request.AddHeader("Authorization", $"Basic {encodedPat}"); request.AddHeader("Accept", "application/json"); // 执行请求 RestResponse response = client.Execute(request); // 验证结果 if (response.StatusCode == HttpStatusCode.NoContent) { Console.WriteLine("测试用例已永久删除"); } else { Console.WriteLine($"删除失败: {response.Content}"); }
关键注意事项
- 端点选择:必须使用
_apis/wit/workitems/{workItemId},而非测试用例专属端点,因为测试用例属于工作项范畴,删除操作统一由WIT接口处理。 - 永久删除参数:
destroy=true是必须参数,若省略该参数,工作项只会被移至回收站,并未永久删除。 - PAT权限:确保你的个人访问令牌(PAT)拥有工作项删除的权限(至少需要「Work Items (Delete)」权限)。
- SDK调用问题:你之前使用的
workItemTrackingClient.DeleteWorkItemAsync(witID, true)无效,可能是因为SDK版本不兼容,或者未正确处理异步操作。如果继续使用SDK,建议升级到最新版本的Microsoft.TeamFoundationServer.Client包,并改用await处理异步调用,避免直接用SyncResult()。
内容的提问来源于stack exchange,提问作者Ken B
相关产品推荐
相关产品推荐

