我正在尝试启动一个版本,使用 C# 和 Azure Devops Rest API 将数据库 dacpac 部署到另一个环境。
我使用了下面的代码来执行请求,但我无法启动管道
var definitionId = 4;
var testvalue = "Changed value";
string url = @"https://vsrm.dev.azure.com/<Organisation>/<project>/_apis/release/releases?definitionId=4&api-version=5.1";
string personalToken = "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", personalToken);
var requestMessage = new HttpRequestMessage(HttpMethod.Post, " https://vsrm.dev.azure.com/<Organisation>/<project>/_apis/release/releases?api-version=5.1");
//requestMessage.Content = new StringContent("{\"definitionId\":" + definitionId + "};", Encoding.UTF8, //"application/json");
requestMessage.Content = new StringContent("{\"definitionId\":" + definitionId + ", \"variables\": { \"Test:\" { \"value\":" + testvalue +"}}};", Encoding.UTF8, "application/json");
HttpResponseMessage response = client.SendAsync(requestMessage).Result;
if (response.IsSuccessStatusCode)
{
// Parse the response body.
}
}
尝试使用此代码但无法启动发布..
我在 powershell 中尝试了同样的操作,它有效。
$VSTSAccoutName="Organisation"
$teamProjectName="Project"
$ReleaseDefId="4"
$ReleaseMetadata = '{"definitionId": ' + $ReleaseDefId + ',
"variables": {
"Test": {
"value": "changed value test"
}
}
}';
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personaltoken)"))
$header = @{authorization = "Basic $token"}
$Uri = 'https://vsrm.dev.azure.com/' + $VSTSAccoutName +'/'+ $teamProjectName + '/_apis/release/releases?api-version=5.0'
$ReleaseResponse = Invoke-RestMethod -Method Post -ContentType application/json -Uri $Uri -Body $ReleaseMetadata -Headers $header
Write-Host $ReleaseResponse
我在上面的代码中遗漏了什么吗?您能否建议触发释放的正确方法?
同意 Crowcoder 的观点。
使用相同的 C# 代码进行测试,我可以重现相同的问题。
要解决这个问题,需要更改参数定义。
例如:
var definitionId = "\"15\"";
var testvalue = "\"test123\" ";
这里是示例代码,您可以参考:
namespace ConsoleApp12
{
class Program
{
static void Main(string[] args)
{
var definitionId = "\"15\"";
var testvalue = "\"test123\" ";
string personalToken = "PAT";
var base64Token = Convert.ToBase64String(Encoding.ASCII.GetBytes($":{personalToken}"));
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", base64Token);
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "https://vsrm.dev.azure.com/organization/Project/_apis/release/releases?api-version=5.1");
//requestMessage.Content = new StringContent("{\"definitionId\":" + definitionId + "};", Encoding.UTF8, //"application/json");
//requestMessage.Content = new StringContent("{\"definitionId\":" + definitionId + "};", Encoding.UTF8, "application/json");
requestMessage.Content = new StringContent("{\"definitionid\":" + definitionId + ", \"variables\": { \"test\" : { \"value\": " + testvalue + " }}}", Encoding.UTF8, "application/json");
using (HttpResponseMessage response = client.SendAsync(requestMessage).Result)
{
response.EnsureSuccessStatusCode();
}
}
}
}
}
这样就可以成功触发发布管道了。
我是新手...这里的 testvalue 是什么?我想在我的管道上执行这个,我知道定义 id,但我不知道 testvalue 是什么