У меня есть служебные перехватчики в моем проекте TFS. Как можно получить информацию для служебных перехватчиков с помощью C#? Мне нужно имя ловушки и значение State
(Enabled
или Disabled
).
Является ли это возможным?
Вы можете использовать REST API, чтобы получить значение состояния. См. Получите список подписок
Например, PowerShell:
Param(
[string]$baseUrl = "https://{account}.visualstudio.com/DefaultCollection/_apis/hooks/subscriptions",
[string]$user = "username",
[string]$token = "password"
)
# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$response = (Invoke-RestMethod -Uri $baseUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$hooks = $response.value
$states = @()
foreach($hook in $hooks){
$customObject = new-object PSObject -property @{
"consumer" = $hook.consumerId
"id" = $hook.id
"eventType" = $hook.eventType
"state" = $hook.status
}
$states += $customObject
}
$states | Select `
consumer,
id,
eventType,
state
Чтобы вызвать REST API с помощью C#, вы можете ссылаться на этот поток: Как вызвать в REST api с помощью C#?
Вы также можете сослаться на приведенный ниже образец:
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
namespace GetBuildsREST
{
class Program
{
public static void Main()
{
Task t = GetBuildsREST();
Task.WaitAll(new Task[] { t });
}
private static async Task GetBuildsREST()
{
try
{
var username = "domain\\user";
var password = "password";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", username, password))));
using (HttpResponseMessage response = client.GetAsync(
"https://{account}.visualstudio.com/DefaultCollection/_apis/hooks/subscriptions?api-version=2.0").Result)
{
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
//Do somthing to get the vale of the state....
//var obj = JObject.Parse(responseBody);
//var state = (string)obj["value"]["status"];
//or var state = (string)obj.SelectToken("value.status");
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
@ignn Решили ли вы проблему с помощью решения? какое-нибудь обновление?