按Wiql查询(WorkItem)给出错误的请求状态

时间:2019-04-24 10:18:19

标签: c# .net asp.net-web-api tfs

我正在尝试为工作项调用发布API(DevOps),但显示状态为“错误请求”。

如果我调用一些GET API(DevOps),则工作正常。我点击以下链接来调用POST API:

  

https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/wiql/query%20by%20wiql?view=azure-devops-rest-5.0

代码:

using (var client = new HttpClient())
                {
                   string content = "{'query': 'Select [System.Id], [System.Title], [System.State] From WorkItems'}";
                    client.BaseAddress = new Uri("http://YYYYY.com:8080/tfs/YY");  //url of your organization
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
                    var response = client.PostAsJsonAsync(new Uri("http://YYYYY.com:8080/tfs/YY/_apis/wit/wiql?api-version=1.0"), content).Result;
                    if (response.IsSuccessStatusCode)
                    {
                        Console.Write("Success");
                    }
                    else
                        Console.Write("Error");
                }

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码:

var personalaccesstoken = "xxxxxxxxxx";
var base64Token = Convert.ToBase64String(Encoding.ASCII.GetBytes($":{personalaccesstoken}"));  
using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64Token);
    var requestMessage = new HttpRequestMessage(HttpMethod.Post, "http://{tfsserver}:8080/tfs/DefaultCollection/_apis/wit/wiql?api-version=1.0");
    requestMessage.Content = new StringContent("{\"query\": \"select [System.Id], [System.Title], [System.State] from WorkItems\"}", Encoding.UTF8, "application/json");
    using (HttpResponseMessage response = client.SendAsync(requestMessage).Result)
    {
        response.EnsureSuccessStatusCode();
    }    
}