TFS 2018 API:可以访问工作项但不能访问工作项 API 端点
TFS 2018 API: Can access workitems but not workitem API end point
我创建了一个中间件应用程序,它将从 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
我是不是遗漏了什么?
根据您的描述,您似乎只想要 URL 创建的工作项,这样任何人在单击 URL 时,创建的工作项都会打开。
https://tfsurl:8080/tfs/DefaultCollection/PatrickProject/_workitems/edit/172/
URL 应该是上述格式,这里的 DefaultCollection 是集合名称,PatrickProject 是项目名称。在这种情况下,我使用了这个 url 并去掉了 id '172' 并使用了新创建的工作项的 ID。这将 return URL 转到工作项 HTML 页面。
所以这是一个固定的格式,如果你有新创建的WorkItem ID和集合名称,项目名称,你只需要按照上面的格式并更改工作项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
}
希望对您有所帮助!
要获取特定的工作项信息,您需要改用 Get Workitem API call so try http://sampleserver:8080/tfs/sampleproject/_apis/wit/workitems/3?api-version=4.0。
您也可以使用此 http://sampleserver:8080/tfs/sampleproject/_apis/wit/workitems/3?$expand=Links&api-version=4.0,这将 return Id 为 3 的工作及其所有链接(父文件、附加文件、变更集等)
请注意,api-version=4.0 会根据您使用的 TFS/Service 版本而变化,并且应该始终是 REST 调用中的最后一个字符串。
我创建了一个中间件应用程序,它将从 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
我是不是遗漏了什么?
根据您的描述,您似乎只想要 URL 创建的工作项,这样任何人在单击 URL 时,创建的工作项都会打开。
https://tfsurl:8080/tfs/DefaultCollection/PatrickProject/_workitems/edit/172/
URL 应该是上述格式,这里的 DefaultCollection 是集合名称,PatrickProject 是项目名称。在这种情况下,我使用了这个 url 并去掉了 id '172' 并使用了新创建的工作项的 ID。这将 return URL 转到工作项 HTML 页面。
所以这是一个固定的格式,如果你有新创建的WorkItem ID和集合名称,项目名称,你只需要按照上面的格式并更改工作项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
}
希望对您有所帮助!
要获取特定的工作项信息,您需要改用 Get Workitem API call so try http://sampleserver:8080/tfs/sampleproject/_apis/wit/workitems/3?api-version=4.0。
您也可以使用此 http://sampleserver:8080/tfs/sampleproject/_apis/wit/workitems/3?$expand=Links&api-version=4.0,这将 return Id 为 3 的工作及其所有链接(父文件、附加文件、变更集等)
请注意,api-version=4.0 会根据您使用的 TFS/Service 版本而变化,并且应该始终是 REST 调用中的最后一个字符串。