public static HttpClient PrepareRequest(Models.WorkItemUpdateContainer container) { HttpClient client = new HttpClient(); var token = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "", container.PAT))); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", token); return(client); //https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.1&viewFallbackFrom=azure-devops }
private static async Task <bool> UpdateWorkItemAsync(Models.WorkItemUpdateContainer container) { var wid = container.Id; var client = PrepareRequest(container); var containerSerialized = JsonConvert.SerializeObject(new List <Models.WorkItemUpdateContainerOptions>() { container.Options }); HttpContent content = new StringContent(containerSerialized, Encoding.UTF8, "application/json-patch+json"); using (HttpResponseMessage response = await client.PatchAsync($"https://dev.azure.com/{container.Organization}/{container.Project}/_apis/wit/workitems/{wid}?api-version=5.1", content)) { return(response.IsSuccessStatusCode); } }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook")] HttpRequest req, ILogger log) { log.LogInformation("Hook has been called."); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); var data = JsonConvert.DeserializeObject <Models.DevOpsPayload>(requestBody); var descriptionNewValue = data.Resource.Fields["System.Description"].NewValue; var descriptionOldValue = data.Resource.Fields["System.Description"].OldValue; if (descriptionNewValue != descriptionOldValue) { var translatedContent = await CallTranslationServiceAsync(descriptionNewValue, log); var options = new Models.WorkItemUpdateContainerOptions() { Operation = "replace", Path = Environment.GetEnvironmentVariable("FIELD"), Value = translatedContent, }; var workItemContainer = new Models.WorkItemUpdateContainer() { Id = data.Resource.WorkItemId, Options = options, PAT = Environment.GetEnvironmentVariable("PAT"), Organization = Environment.GetEnvironmentVariable("ORGANIZATION"), Project = Environment.GetEnvironmentVariable("PROJECT") }; await UpdateWorkItemAsync(workItemContainer); } return(new OkObjectResult(requestBody)); }