2017-01-16 88 views
2

我試圖設置與使用其餘API和PowerShell的TFS 2017內部部署服務器上的團隊相關聯的區域。爲TFS團隊設置區域時參數'patch'的ArgumentNullException

當我嘗試調用我的URI

http://MyTfsServer:8080/tfs/DefaultCollection/TeamProject/TeamName/_apis/Work/TeamSettings/TeamFieldValues?api-version=2.0-preview.1

API example用JSON包作爲解釋,我收到以下錯誤返回:

 
Invoke-RestMethod : {"$id":"1","innerException":null,"message":"Value cannot be null. 
\r\nParameter name: patch","typeName":"System.ArgumentNullException, mscorlib, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 
"typeKey":"ArgumentNullException","errorCode":0,"eventId":0} 
+ ... $result = Invoke-RestMethod -Method Patch -Uri $setTeamAreaPathUri ... 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException 
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand 
我真的可以使用索姆指導,以什麼我應該尋找。我已經驗證了我的Json包,它應該是格式良好的。

 
{ 
    "defaultValue": "TeamProject\\Area1", 
    "Values": [ 
        { 
         "value": "Area2\\Area21\\Area211", 
         "includeChildren": false 
        }, 
        { 
         "value": "Area3\\Area31\\Area311", 
         "includeChildren": false 
        } 
       ] 

} 

更新

我與PowerShell的調用,RestMethod cmdlet的

 
Invoke-RestMethod -Method Patch -Uri $setTeamAreaPathUri -UseDefaultCredentials -Body $json -ContentType "application/json" 

$setTeamAreaPathUri對應於上述HTTP URI調用上面的URI。我應該使用post作爲我的webrequest方法而不是補丁嗎?

我完全能夠使用get請求從相同的URI獲得響應。但是,不能更改使用補丁方法現有團隊區域:-(

更新2

這似乎與斯堪的納維亞字符「æøå」被包括在區域路徑,如果我排除一切包括æ,ø或å的區域路徑,我沒有錯誤,從我的例子中並不明顯......對不起! 有沒有辦法在json中解析,這樣TFS服務器就不會中斷它了?或者,這是因爲我缺乏PowerShell rest api調用的效率?

+0

請問您可以發佈您的invoke-webrequest代碼。 ?我們的Json是有效的,但解析似乎不同。 –

+0

您的API示例鏈接應該是https://www.visualstudio.com/en-us/docs/integrate/api/work/team-field-values#update-team-field-values而不是https://www.visualstudio .com/en-us/docs/integrate/api/work/team-settings#update-a-teams-settings更新團隊設置。 –

+0

無法重現您的問題,您是否嘗試了一些其他客戶端,如郵遞員來測試您的休息api和json body?還可以嘗試用'\\ Area2'而不是'Area2 \\ Area21 \\ Area211' –

回答

3

看起來這與包含特殊字符的區域路徑有關,例如主要用於斯堪的納維亞半島的æ,ø,å。

如果我打電話則啓動-restmethod作爲

-ContentType "application/json;charset=utf-8"

時指定我的內容類型,我沒有問題,什麼那麼調用API的打補丁方法。

不便之處!

並感謝您的幫助!

+0

感謝您的分享。一旦你可以,你可以把它標記爲答案。這有助於他人在這個網站。 –

0

我也無法重現這個問題,這似乎是因爲patch對象爲null而發生的。你是否試過用郵差來測試api?此外,默認值應該是團隊允許的團隊字段值之一。