【发布时间】:2015-10-23 00:17:15
【问题描述】:
我整个星期都在反对这个。 使用 REST api 创建一个新的团队项目。 我在任何地方看到的响应都是一样的,而且总是涉及到使用命令行和 xml。
但是为什么呢?
在 Visual Studio 在线页面上可以找到:
https://www.visualstudio.com/en-us/integrate/api/tfs/projects
(具体看标有“创建团队项目”的部分)
如果不能使用,为什么还会存在呢? 还是我错过了什么?
如果有人知道使用它的任何示例,我将不胜感激。
我一直在使用 Microsoft.TeamFoundation.WorkItemTracking.Client 命名空间等...并且一直很高兴地为项目创建新的工作项
我什至还设法使用 API 来下拉项目列表。 使用此示例中的代码(滚动到页面底部)
https://www.visualstudio.com/en-us/integrate/get-started/rest/basics
但我终生无法发布新的团队项目。
此时我愿意接受任何建议,我在这里创建了一个帐户只是为了询问(我喜欢这个网站):(
根据要求,一些代码:
static async Task<string> PostProjectAsync(HttpClient _client, string _apiUrl, string _apiVersion)
{
var responseBody = string.Empty;
HttpContent hc = new StringContent(@"
{
""name"": ""Testprojectfromconsole"",
""description"": ""Posted from console application using the tfs API""
}
");
//TODO: make a class that matches the json layout that the api is expecting
//then see if you have any better luck with that instead of this horrid horrid mess
ProjectPost newproj = new ProjectPost();
newproj.Name = @"Test Project -From console";
newproj.Description = @"Hopefully this has been posted from the console app, delete it later on if need be.";
newproj.Capabilities.VersionControl.SourceControlType = @"TFS"; //probably wrong
newproj.Capabilities.ProcessTemplate.TemplateTypeId = @"default"; //also probably wrong
string json = JsonConvert.SerializeObject(newproj);
try
{
using (HttpResponseMessage response = _client.PostAsync(_apiUrl + _apiVersion, hc).Result)
{
response.EnsureSuccessStatusCode();
responseBody = await response.Content.ReadAsStringAsync();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return responseBody;
}
目前我将一个名为“hc”的 HttpContent 传递给 postasync,但如果我将其切换为 json 对象,postasync 将停止工作(因为它想要 httpcontent 而不是 json)
在调用这个方法之前,客户端是这样设置的:
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//Set alternate credentials
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", ALTUSERNAME, ALTPASSWORD))));
Console.WriteLine("<--------------Getting projects from tfs!-------------->");
Console.WriteLine("<----------------Hold on to your butts!---------------->");
responseBody = await GetAsync(client, BASEURL + "projects", APIVERS);
Console.WriteLine(responseBody.ToString());
Console.WriteLine("<----------------Making a new project!----------------->");
Console.WriteLine("<----------------Hold on to your butts!---------------->");
responseBody = await PostProjectAsync(client, BASEURL + "projects", APIVERS);
Console.WriteLine(responseBody.ToString());
哦,网址是这样的:
static string PN1 = @"Test Project -From Web";
static string PN2 = @"Another Test Project -From Web";
static string COL = @"DefaultCollection";
static string BASEURL = "https://{0}.visualstudio.com/DefaultCollection/_apis/";
// Get the alternate credentials that you'll use to access the Visual Studio Online account.
static string ALTUSERNAME = "myusername";
static string ALTPASSWORD = "mypassword!";
//Your visual studio account name
static string ACCOUNT = "ourserver";
//Api version query parameter
static string APIVERS = "?api-version=1.0";
【问题讨论】:
-
您能否详细说明您尝试过的方法以及失败的原因?
-
当我通过 httpContent 时,我的控制台输出告诉我错误代码 405,调查后表示方法不允许:/
-
您可以尝试将 sourceControlType 更改为“TfVc”吗?
-
是的!谢谢Lukkha (^_^)
标签: rest tfs azure-devops