【发布时间】:2021-05-30 02:59:36
【问题描述】:
我一直在尝试在 Azure DevOps 中创建工作项。 但是出现“404 not found”的错误
ItemType 是 -Task 前缀为 $。 当我尝试在 url (get request) 中获取特定的工作项编号时,我得到了其他项目,所以我确定 org + project 和 URI 的其余部分是正确的。
可能是什么问题? (生成令牌(PAT)时,我也授予了完全访问权限)
using System;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;
namespace TaskCreator
{
static class Azure
{
public const string BASE = "https://dev.azure.com";
public const string PAT = "XXX";
public const string ORG = "Org2";
public const string API = "api-version=6.0";
public const string PROJECT = "Project2";
public const string WIT_TYPE = "$Task";
}
class Program
{
static void Main(string[] args)
{
// Create and initialize HttpClient instance.
HttpClient client = new HttpClient();
// Set Media Type of Response.
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Generate base64 encoded authorization header.
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "", Azure.PAT))));
// Build the URI for creating Work Item.
string uri = String.Join("?", String.Join("/", Azure.BASE, Azure.ORG, Azure.PROJECT, "_apis/wit/workitems", Azure.WIT_TYPE), Azure.API);
// Create Request body in JSON format.
string json = "[{ \"op\": \"add\", \"path\": \"/fields/System.Title\", \"from\": null, \"value\": \"REST API Demo task\"}]";
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json-patch+json");
// Call CreateWIT method.
string result = CreateWIT(client, uri, content).Result;
// Pretty print the JSON if result not empty or null.
if (!String.IsNullOrEmpty(result))
{
dynamic wit = JsonConvert.DeserializeObject<object>(result);
Console.WriteLine(JsonConvert.SerializeObject(wit, Formatting.Indented));
}
// Presss any key to exit
Console.ReadLine();
client.Dispose();
}
public static async Task<string> CreateWIT(HttpClient client, string uri, HttpContent content)
{
try
{
// Send asynchronous POST request.
using (HttpResponseMessage response = await client.PostAsync(uri, content))
{
response.EnsureSuccessStatusCode();
return (await response.Content.ReadAsStringAsync());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return string.Empty;
}
} // End of CreateWIT method
}
}
【问题讨论】:
-
检查
url变量的值 -
你确定应该是POST请求吗?我认为应该是 GET
-
@EilonA 我能够在没有任何错误的情况下运行您的代码,并且看到工作项已创建。不确定确切的问题可能是什么。您是否在不同的组织或不同的 PAT 中尝试过?您的帐户是否有足够的permissions 来创建工作项?
-
@viveknuna 不,Work Items - Create API 是一个 POST 调用。
标签: c# rest azure-devops devops azure-devops-rest-api