如何解决使用Rest API在Azure Devops中创建项目
我想通过REST API(see documentation)创建一个Azure DevOps项目 但我无法启动它。
我尝试在PostMan中发送请求,但是我不知道如何通过OAuth2(文档)进行身份验证。
这是我到目前为止尝试过的:
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace WorkItemTest
{
class AzureAdmin
{
private readonly Uri uri;
private readonly string personalAccessToken;
public AzureAdmin(string orgName,string personalAccessToken)
{
this.uri = new Uri("https://dev.azure.com/" + orgName);
this.personalAccessToken = personalAccessToken;
}
public async Task<bool> createProject()
{
try
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",Convert.ToBase64String(
Encoding.ASCII.GetBytes(
string.Format("{0}:{1}","",personalAccessToken))));
string contentString = "{\"name\":\"sup\",\"description\":\"\",\"visibility\":0,\"capabilities\":{\"versioncontrol\":{\"sourceControlType\":\"Git\"},\"processTemplate\":{\"templateTypeId\":\"b8a3a935-7e91-48b8-a94c-606d37c3e9f2\"}}}";
HttpContent content = new StringContent(contentString);
var result = await client.PostAsync($"{uri}/_apis/projects?api-version=6.0",content);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return true;
}
}
}
响应
400:错误的请求
解决方法
丹尼尔·曼恩是对的。问题出在json上。如果您创建一个对象并将其直接发布,那么一切都很好:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace WorkItemTest
{
class AzureAdmin
{
private readonly Uri uri;
private readonly string personalAccessToken;
public AzureAdmin(string orgName,string personalAccessToken)
{
this.uri = new Uri("https://dev.azure.com/" + orgName);
this.personalAccessToken = personalAccessToken;
}
public async Task<bool> createProject()
{
try
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",Convert.ToBase64String(
Encoding.ASCII.GetBytes(
string.Format("{0}:{1}","",personalAccessToken))));
var req = new Root
{
name = "sup3",description = "",visibility = 0,capabilities = new Capabilities
{
versioncontrol = new Versioncontrol {sourceControlType = "Git"},processTemplate = new ProcessTemplate
{
templateTypeId = "b8a3a935-7e91-48b8-a94c-606d37c3e9f2"
}
}
};
var result = await client.PostAsJsonAsync($"{uri}/_apis/projects?api-version=6.0",req); //
Console.WriteLine(result.StatusCode);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return true;
}
public class Versioncontrol
{
public string sourceControlType { get; set; }
}
public class ProcessTemplate
{
public string templateTypeId { get; set; }
}
public class Capabilities
{
public Versioncontrol versioncontrol { get; set; }
public ProcessTemplate processTemplate { get; set; }
}
public class Root
{
public string name { get; set; }
public string description { get; set; }
public int visibility { get; set; }
public Capabilities capabilities { get; set; }
}
}
}
,
我尝试在PostMan中发送请求,但我不知道如何 通过OAuth2(文档)进行身份验证。
为此,您可以使用PAT令牌在PostMan中进行身份验证。
有关如何在天蓝色devops中创建PAT的信息,请参阅此document。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。