gpt4 book ai didi

c# - TFS rest api 授权 GET 但不授权 PATCH

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:53 24 4
gpt4 key购买 nike

我正在尝试使用我的 TFS 2015 Update 3(本地)提供的其余 API 更改工作项的状态。当我尝试获取我的项目列表时,一切正常:

var client = new RestClient(uri);
client.Authenticator = new HttpBasicAuthenticator(this.TFSUsername, this.SecurityToken);
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");

IRestResponse response = client.Execute(request);

在我得到这个答案并获得我需要的所有信息后,我打算更新其中一个工作项的状态。

使用相同的方法(当然还有相同的凭据),我得到了 401 状态代码,因为我试图匿名进行

唯一的区别是我使用了动词 PATCH(如文档所述,我必须这样做)并且我正在传递一个主体来标识我想要编辑的状态。

这是我用于编辑的代码:

var client = new RestClient(uri);
client.Authenticator = new HttpBasicAuthenticator(this.TFSUsername, this.SecurityToken);
var request = new RestRequest(Method.PATCH);
request.AddHeader("cache-control", "no-cache");

string body = @"
{
'op':'add',
'path':'/fields/System.State',
'value':'Closed'
}";
request.AddJsonBody(body);
IRestResponse response = client.Execute(request);

关于为什么仅更改 HTTP VERB 会导致我出现此授权问题的任何提示?

尝试用 Postman 做这件事导致了我同样的问题。

更新:

查看响应 header ,我注意到了这一点:

X-TFS-ProcessId →e2b98235-1d3a-4bb7-868f-0d91805aa307
ActivityId →08909688-ac81-4c37-9cea-b47e84fd3efe
X-TFS-Session →08909688-ac81-4c37-9cea-b47e84fd3efe
X-VSS-E2EID →08909688-ac81-4c37-9cea-b47e84fd3efe
X-FRAME-OPTIONS →SAMEORIGIN
WWW-Authenticate →Basic realm="http://xxxxxxx/tfs"
WWW-Authenticate →Negotiate
WWW-Authenticate →NTLM
X-Powered-By →ASP.NET
P3P →CP="CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT"
Lfs-Authenticate →NTLM
X-Content-Type-Options →nosniff
Date →Thu, 28 Feb 2019 00:20:57 GMT
Content-Length →0

引起我注意的是:

WWW-Authenticate →Basic realm="http://xxxxxxx/tfs"

WWW-Authenticate →Negotiate

WWW-Authenticate →NTLM

因此它将支持基本身份验证作为 Get,但不起作用。 “协商”和“NTLM”是否有某种干扰?

谢谢

最佳答案

经过大量尝试,我发现解决方案非常简单。

从身份验证的角度来看,要使其工作,使用 NtlmAuthenticator(带有用户名和密码)而不是 HttpBasicAuthenticator(即使正在为 get 工作)就足够了。我用 NtlmAuthenticator 替换了 get 和 patch 的身份验证器,现在工作正常。

var client = new RestClient(uri);
client.Authenticator = new NtlmAuthenticator(this.TFSUsername, this.TFSPassword);

我发现的另一个棘手的部分(没有精确链接到身份验证)是 PATCH 的内容类型必须是 application/json-patch+json

希望对你有帮助

关于c# - TFS rest api 授权 GET 但不授权 PATCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com