【发布时间】:2026-01-17 06:00:01
【问题描述】:
我正在尝试为客户创建一个 Web 应用程序(托管在 Azure 上),以便能够将工作项提交到我们的团队服务页面。基本上是一个支持票页面,因此他们不必一直打电话解释他们的积压工作。
下面是我根据微软的示例代码创建工作项的类和方法,出于隐私原因进行了一些明显的更改。此方法由单击按钮触发,到目前为止,我无法使用它来创建任何工作项。
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using Newtonsoft.Json;
namespace customapp
{
public class CreateWorkItem
{
public void CreateWorkItemMethod()
{
string personalAccessToken = "xxxxxxxxx";
string credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "xxx", personalAccessToken)));
Object[] patchDocument = new Object[1];
patchDocument[0] = new { op = "add", path = "/fields/System.Title", value = "Test" };
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
var patchValue = new StringContent(JsonConvert.SerializeObject(patchDocument), Encoding.UTF8, "application/json-patch+json");
var method = new HttpMethod("PATCH");
var request = new HttpRequestMessage(method, "https://example.visualstudio.com/exampleproject/_apis/wit/workitems/$Support&20Ticket?api-version=1.0") { Content = patchValue };
var response = client.SendAsync(request).Result;
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsStringAsync().Result;
}
}}}}
在 PATCH 的 url 中,我使用了团队项目的 ID(代替您在下面看到的 /exampleproject)。我们的站点设置有一个整体项目,我们称之为“Master”,里面是每个客户的团队项目,例如“ClientProject”。所以基本上我想在Master中创建一个“Support Ticket”工作项->ClientProject->Backlog/Board.
【问题讨论】:
-
您遇到的错误是什么?你能提供这方面的信息吗?
-
似乎是一个错误的地方。在 HttpRequestMessage 中,我为 Support 和 Ticket 之间的空格添加了 %20,但错误是说它不是工作类型。所以我尝试了“Bug”,它有效,vsts 上的统计页面显示创建了一个工作项,但我无法在任何地方找到它。
-
对于“Bug”工作项,如果您尝试反序列化响应,您将获得一个 Id,您可以使用它在 VSO 中进行搜索。对于“支持工单”工作项,导航到团队项目“客户项目”,您是否能够在“新建”下拉菜单下看到工作项?
-
工作项类型是名为 Support Ticket 还是 $Support Ticket?您的代码正在尝试创建一个
$Support&20Ticket,它可能应该是Support%20Ticket。请注意缺少前导美元符号,并且空格正确转义为%20而不是&20。 -
@BhadhriVishalKannan 找不到“错误”工作项,但我相信可能是管理员从该项目积压中过滤掉了错误工作项。不过不确定。
标签: c# visual-studio azure azure-devops azure-devops-rest-api