2017-10-06 177 views
1

我使用Microsoft.VisualStudio.Services.Client连接到具有不同证书的TFS/VSTS以更新工作项目。TFS REST API .NET客户端TFS2017个人访问令牌:“您必须在请求的主体中传递有效的修补程序文档。”

的情况下,当我连接到TFS2017的前提和使用个人访问令牌(PAT),工作项肌酸更新失败:

必须在请求主体传递一个有效的补丁文件。

尽管所有GET请求都能正常工作。

如果我连接到VSTS(即使使用PAT),以及使用NTLM凭证连接到TFS2017时,也可以使用相同的场景。

使用Fiddler检查它,问题似乎是,对于这种情况,TFS2017会为每个请求发送一个验证质询(对于VSTS,它只发送第一个请求,然后传入会话ID)。

.NET客户端发送正确的修补程序文档作为第一个POST/PATCH请求的内容,但它在响应身份验证质询时不再包括该内容。所以第二个请求的内容是空的,这会触发“您必须在请求的正文中传递有效的补丁文档”。最后。

我有不同的认证方式尝试过,但它是所有相同,GET请求工作(所以AUTH作品一般),但更新不:

  • new VssBasicCredential(string.Empty, pat)
  • new VssCredentials(new WindowsCredential(new NetworkCredential(string.Empty, pat)))

我认为它适用于VSTS,因为只有第一个(GET)请求存在身份验证质询,而不是稍后POST/PATCH请求。

任何有关如何让这种情况下工作的提示?

回答

1

我现在用Microsoft.TeamfoundationServer.Client + Microsoft.AspNet.WebApi.Client来做所有事情。 所有TFS/VSTS服务都有HTTPClient。我曾经开发自己的客户,因为图书馆在四月份并不算大。我记得有与认证相同的问题。我用来登录使用:

credentials = new VssCredentials(useDefaultCredentials: true); 
connection = new VssConnection(new Uri(uriString), credentials); 

我用得到的连接等等HttpMessageHandler。获取身份验证的线索首先通过VS或浏览器登录。

另一种方式是给HttpClient提供正确的身份验证。

它与POST和GET一起工作。

我的安装程序是一个TFS2015和VS2017。我希望这可以帮助你以某种方式

+0

Thx!我的工具在非交互式会话中运行,因此不能通过浏览器窗口进行登录。也许我的问题也与我之前没有考虑的http vs https有关。但我需要设置一个测试环境来确保。 –

+0

我希望你能用这个: https://docs.microsoft。COM/EN-US/VSTS /集成/ GET-开始/ REST /样本 – weiky

相关问题