首页 > 解决方案 > TFS 2018 API:可以访问工作项但不能访问工作项 API 端点

问题描述

我创建了一个中间件应用程序,它将从 TFS 中提取工作项数据。

我能够使用工作项端点来做到这一点。

http://sampleserver:8080/tfs/sampleproject/_apis/wit/wiql?api-version=4.0/workitems?ids=1,2,3

现在,我还需要获取每个工作项的工作项链接。根据文档,我需要使用扩展项目访问工作项。但不幸的是,工作项端点似乎不起作用。

http://sampleserver:8080/tfs/sampleproject/_apis/wit/wiql?api-version=4.0/workitem/3

我在这里错过了什么吗?

标签: c#tfs

解决方案


根据您的描述,看起来您只想要创建的 WorkItem 的 URL,这样任何人在单击 URL 时,都会打开创建的 Work Item。

https://tfsurl:8080/tfs/DefaultCollection/PatrickProject/_workitems/edit/172/

URL 应该是上述格式,这里 DefaultCollection 是集合名称,PatrickProject 是项目名称。在这种情况下,我使用了这个 url 并去掉了 id '172' 并使用了新创建的工作项的 ID。这将返回 URL 以转到工作项 HTML 页面。

所以它是一个固定的格式,如果你有 Newly Created WorkItem ID 和 collection name , project name ,你只需要按照上面的格式,改变工作项 ID 的最后一个值。就是这样,忽略您创建的工作项类型。

如果要使用代码执行此操作,请不要使用 Rest API,您需要使用客户端 API,示例代码段:

var tfsURI = new Uri("http://test:8080/tfs");
var networkCredential1 = new NetworkCredential("test", "test!");

    ICredentials credential = (ICredentials)networkCredential1;
    Microsoft.VisualStudio.Services.Common.WindowsCredential winCred = new Microsoft.VisualStudio.Services.Common.WindowsCredential(credential);
    VssCredentials vssCredentials = new VssCredentials(winCred);

    using (TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tfsURI, vssCredentials))
    {
        collection.EnsureAuthenticated();
        TswaClientHyperlinkService hyperlinkService = 
           collection.GetService<TswaClientHyperlinkService>();
        String TFSurl = hyperlinkService.GetWorkItemEditorUrl(17648).ToString(); //17648 WorkItem ID
    }

希望这可以帮助!


推荐阅读