2017-10-06 142 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

相關問題