TFS REST API .NET 客户端,TFS2017,个人访问令牌:"You must pass a valid patch document in the body of the request."
TFS REST API .NET Client, TFS2017, Personal Access Token: "You must pass a valid patch document in the body of the request."
我使用 Microsoft.VisualStudio.Services.Client
通过不同的凭据连接到 TFS/VSTS 以更新工作项。
如果我在本地连接到 TFS2017 并使用个人访问令牌 (PAT),工作项创建更新失败并显示:
You must pass a valid patch document in the body of the request.
虽然所有 GET 请求都工作正常。
如果我连接到 VSTS(即使使用 PAT)以及当我使用 NTLM 凭据连接到 TFS2017 时,同样的情况也适用。
用 Fiddler 检查,问题似乎是,对于这种情况,TFS2017 会为每个请求发送身份验证质询(对于 VSTS,它只在第一次发送它,然后才传入会话 ID)。
.NET 客户端将正确的补丁文档作为第一个 POST/PATCH 请求的内容发送,但在响应身份验证质询时不会再次包含该内容。所以第二个请求的内容是空的,这会在最后触发 "You must pass a valid patch document in the body of the request." 。
我尝试过不同的身份验证方式,但都是一样的,GET 请求有效(因此身份验证通常有效),但更新无效:
new VssBasicCredential(string.Empty, pat)
new VssCredentials(new WindowsCredential(new NetworkCredential(string.Empty, pat)))
我认为它适用于 VSTS,因为身份验证挑战仅适用于第一个 (GET) 请求,而不适用于以后的 POST/PATCH 请求。
关于如何让这个场景起作用的任何提示?
我现在用 Microsoft.TeamfoundationServer.Client
+Microsoft.AspNet.WebApi.Client
做所有事情。
所有 TFS/VSTS 服务都有 HTTPClients。我以前是自己开发客户端的,因为四月份的时候图书馆还没有那么大。我记得在身份验证方面也遇到过同样的问题。我曾经登录过:
credentials = new VssCredentials(useDefaultCredentials: true);
connection = new VssConnection(new Uri(uriString), credentials);
我曾经从连接中获取HttpMessageHandler
等等。获得正确身份验证的线索是首先通过 VS 或浏览器登录。
另一种方法是向 HttpClient 提供正确的身份验证。
它适用于 POST 和 GET。
我的设置是 TFS2015 和 VS2017。我希望这能以某种方式帮助你
郑重声明,如果有人遇到同样的问题:似乎只能使用个人访问令牌 (PAT) 连接是安全的(使用 https)。这有点可以理解,但从错误消息中始终看不清楚。
我使用 Microsoft.VisualStudio.Services.Client
通过不同的凭据连接到 TFS/VSTS 以更新工作项。
如果我在本地连接到 TFS2017 并使用个人访问令牌 (PAT),工作项创建更新失败并显示:
You must pass a valid patch document in the body of the request.
虽然所有 GET 请求都工作正常。
如果我连接到 VSTS(即使使用 PAT)以及当我使用 NTLM 凭据连接到 TFS2017 时,同样的情况也适用。
用 Fiddler 检查,问题似乎是,对于这种情况,TFS2017 会为每个请求发送身份验证质询(对于 VSTS,它只在第一次发送它,然后才传入会话 ID)。
.NET 客户端将正确的补丁文档作为第一个 POST/PATCH 请求的内容发送,但在响应身份验证质询时不会再次包含该内容。所以第二个请求的内容是空的,这会在最后触发 "You must pass a valid patch document in the body of the request." 。
我尝试过不同的身份验证方式,但都是一样的,GET 请求有效(因此身份验证通常有效),但更新无效:
new VssBasicCredential(string.Empty, pat)
new VssCredentials(new WindowsCredential(new NetworkCredential(string.Empty, pat)))
我认为它适用于 VSTS,因为身份验证挑战仅适用于第一个 (GET) 请求,而不适用于以后的 POST/PATCH 请求。
关于如何让这个场景起作用的任何提示?
我现在用 Microsoft.TeamfoundationServer.Client
+Microsoft.AspNet.WebApi.Client
做所有事情。
所有 TFS/VSTS 服务都有 HTTPClients。我以前是自己开发客户端的,因为四月份的时候图书馆还没有那么大。我记得在身份验证方面也遇到过同样的问题。我曾经登录过:
credentials = new VssCredentials(useDefaultCredentials: true);
connection = new VssConnection(new Uri(uriString), credentials);
我曾经从连接中获取HttpMessageHandler
等等。获得正确身份验证的线索是首先通过 VS 或浏览器登录。
另一种方法是向 HttpClient 提供正确的身份验证。
它适用于 POST 和 GET。
我的设置是 TFS2015 和 VS2017。我希望这能以某种方式帮助你
郑重声明,如果有人遇到同样的问题:似乎只能使用个人访问令牌 (PAT) 连接是安全的(使用 https)。这有点可以理解,但从错误消息中始终看不清楚。