Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tfs 使用生成api调用Post时不允许使用方法_Tfs_Azure Devops - Fatal编程技术网

Tfs 使用生成api调用Post时不允许使用方法

Tfs 使用生成api调用Post时不允许使用方法,tfs,azure-devops,Tfs,Azure Devops,我正在使用TFS2018并像这样调用构建api internal void UpdateSourceBranches(List<BuildDefinition> defs) { using (var handler = new HttpClientHandler { Credentials = new NetworkCredential(tfsUser, tfsPass) }) using (var client = n

我正在使用TFS2018并像这样调用构建api

internal void UpdateSourceBranches(List<BuildDefinition> defs)
        {
            using (var handler = new HttpClientHandler { Credentials = new NetworkCredential(tfsUser, tfsPass) })
            using (var client = new HttpClient(handler))
            {
                try
                {
                    client.BaseAddress = new Uri(tfsServer);
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    foreach (var def in defs)
                    {
                        var buildId = def.Id;
                        var sourceBranch = $"$/{def.Repository.Name}/{def.Project.Name}";
                        var parameters = new Dictionary<string, string> { { "BuildConfiguration", "release" },
                        { "BuildPlatform", "x86|x64|ARM" },
                        { "system.debug", "true" }
                    };

                        var jsonParams = JsonConvert.SerializeObject(parameters);

                        var content = new FormUrlEncodedContent(new[]
                        {
                            new KeyValuePair<string, string>("id", buildId.ToString()),
                            new KeyValuePair<string, string>("sourceBranch", sourceBranch),
                            new KeyValuePair<string, string>("parameters", jsonParams)
                        });

                        var response = client.PostAsync($"DefaultCollection/{def.Repository.Name}/_apis/build/builds?api-version=3.0-preview.1", content);
                        var s = response.Result;
                    }                  
                }
                catch (Exception ex)
                {

                }

            }
        }
internal void UpdateSourceBranches(列表定义)
{
使用(var handler=newhttpclienthandler{Credentials=newnetworkcredential(tfsUser,tfsPass)})
使用(var客户端=新的HttpClient(处理程序))
{
尝试
{
client.BaseAddress=新Uri(tfsServer);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
foreach(defs中的var def)
{
var buildId=def.Id;
var sourceBranch=$“$/{def.Repository.Name}/{def.Project.Name}”;
var参数=新字典{{“BuildConfiguration”,“release”},
{“构建平台”、“x86 | x64 | ARM”},
{“system.debug”,“true”}
};
var jsonParams=JsonConvert.SerializeObject(参数);
var content=newformurlencodedcontent(new[]
{
新的KeyValuePair(“id”,buildId.ToString()),
新的KeyValuePair(“sourceBranch”,sourceBranch),
新的KeyValuePair(“参数”,jsonParams)
});
var response=client.PostAsync($“DefaultCollection/{def.Repository.Name}/_api/build/builds?api version=3.0-preview.1”,内容);
var s=响应。结果;
}                  
}
捕获(例外情况除外)
{
}
}
}
但是得到以下的回应

{状态代码:405,原因短语:'不允许使用方法',版本:1.1, 内容:System.Net.Http.StreamContent,标题:{Pragma:无缓存 X-TFS-ProcessId:ActivityId:X-TFS-Session:X-VSS-E2EID: X-FRAME-OPTIONS:SAMEORIGIN X-VSS-UserData::用户持久身份验证: true Lfs身份验证:NTLM X-Content-Type-Options:nosniff 缓存控制:无缓存日期:2018年3月9日星期五14:37:16 GMT P3P: CP=“CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo我们的SAMi总线 DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT“服务器: Microsoft IIS/10.0 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET 内容长度:93允许:获取内容类型:application/json; 字符集=utf-8过期:-1}

知道我为什么不允许使用这种方法吗

以下是糟糕的回答:

{状态代码:400,原因短语:“错误请求”,版本:1.1,内容: System.Net.Http.StreamContent,头:{Pragma:无缓存
X-TFS-ProcessId:xxxxxx-xxxxx-xxxxx-xxxxxx-XXXXXXXXX活动ID: xxxxxx-xxxxx-xxxxx-xxxxxx-XXXXXXXXX X-TFS-会话: xxxxxx-xxxxx-xxxxx-xxxxxx-XXXXXXXXX X-VSS-E2EID: xxxxxx-xxxxx-xxxxx-xxxxxx-XXXXXXXXX X-FRAME-OPTIONS:SAMEORIGIN
X-VSS-UserData:xxxxxx-xxxxx-xxxxx-xxxxxx-XXXXXXXXX:用户
持久身份验证:真Lfs身份验证:NTLM
X-Content-Type-Options:nosniff缓存控制:无缓存日期:周二, 2018年3月13日09:21:53 GMT P3P:CP=“…多个关键字”服务器: Microsoft IIS/10.0 X-AspNet-Version:4.0.30319 X-Powered-By: ASP.NET内容长度:547内容类型:application/json; 字符集=utf-8过期:-1}


听起来你的帖子就是问题所在,试着使用GET

你应该使用
api version=2.0
而不是
3.0-preview.1

更新代码段:

string con = "{\"definition\": {\"id\": 47},\"sourceBranch\":\"$/CeceScrum/TestCaseProject\",\"parameters\":\"{\\\"BuildConfiguration\\\":\\\"release\\\",\\\"BuildPlatform\\\":\\\"any cpu\\\",\\\"system.debug\\\":\\\"false\\\"}\"}";
                        var patchValue = new StringContent(con, Encoding.UTF8, "application/json");
                        HttpClient httpClient = new HttpClient();
                        string _credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "domain\\username", "password")));
                        httpClient.DefaultRequestHeaders.Accept.Clear();
                        httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _credentials);
                        var method = new HttpMethod("POST");

                        var request = new HttpRequestMessage(method, "http://TFS2018:8080/tfs/DefaultCollection/CeceScrum/_apis/build/builds?api-version=2.0") { Content = patchValue };

                        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                        HttpResponseMessage response = httpClient.SendAsync(request).Result;

                       string re= response.Content.ReadAsStringAsync().Result;

是的,你是对的,这就是问题所在。知道如何解决吗?使用GetAsync而不是PostAsynOK,但是如果我使用Get,我如何传递参数?看看这个:谢谢,但是为什么不允许post?Hi@CeceDong MSFT如果我更改为api version=2.0,我得到一个错误的请求…错误的请求意味着你的api不正确。是否要为所有生成定义将生成排队?你能试着设置一个断点来检查你从
content
中得到了什么并将其共享吗?Hi@CeceDong MSFT在content字段中只有基本的标题。我添加了对这个问题的回答…嗨@CeceDon MSFT现在可以工作了,但我认为这会解决问题。是否也可以填写搁置集?是的,您在此处指定的
sourceBranch
将应用于
搁置集名称。