2017-01-16 85 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?此外,默认值应该是团队允许的团队字段值之一。