簡體   English   中英

通過 Jira REST API、Atlassian.Net SDK 將問題狀態更改為完成

[英]Changing issue status to Done via Jira REST API, Atlassian.Net SDK

我在Atlassian.NET SDK 的幫助下使用 Visual Studio (c#) 使用 Jira REST API,並嘗試構建這樣的模型:

  • 搜索帶有項目、問題摘要和狀態的工單;
  • 如果發現問題,那么我想把它的狀態從“待辦”改為“完成”;
  • 如果沒有發現問題,則什么都不做。

搜索功能運行良好,問題在於更改其狀態。 這是我的代碼:

static async System.Threading.Tasks.Task Main(string[] args)
{

            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2

            try
            {

                // Connection to JIRA using REST client
                var jira = Jira.CreateRestClient("https://XXX.atlassian.net", "user", "token");

                // LINQ syntax for retrieving issues
                var issue = (from i in jira.Issues.Queryable
                             where i.Project == "QA" && i.Summary == "Summary" && i.Status == "To Do"
                             orderby i.Created
                             select i).First();

                await issue.SaveChangesAsync();

                string ticketid = issue.Key.Value;
                string ticketsummary = issue.Summary;
                string ticketkey = issue.JiraIdentifier;

                //Updating found issue
                var closeticket = await jira.Issues.GetIssueAsync(ticketid);
                closeticket.Status = "Done";

                await closeticket.SaveChangesAsync();                

            }
            catch (Exception ex) { /*Result: SUCCESS [no issues found]*/ }
      }

使用此代碼,我嘗試在項目“QA”中進行搜索,其中問題摘要為“摘要”,狀態為“待辦事項”。 然后我想關閉它的狀態從“待辦”到“完成”。 但是我在 closeticket.Status = "Done"; 線上遇到錯誤帶文字:

無法將錯誤 CS0200 屬性或索引器“Issue.Status”分配給它——它是只讀的

請給我一些建議,否則我要上吊了……

先感謝您。

編輯:我忘了提到我還嘗試在 httpclient 的幫助下進行狀態更改。 但是有一個問題,當我連接到問題轉換時,它返回狀態碼為 404 的錯誤。

 var handler = new HttpClientHandler();
            handler.AllowAutoRedirect = true;
            handler.Proxy = new WebProxy("https://XXX.atlassian.net", true, null, CredentialCache.DefaultNetworkCredentials);
            // need to pass a valid username + password to JIRA
            var jiraCredentials = UTF8Encoding.UTF8.GetBytes("user:token");
            var httpClient = new HttpClient(handler);
            httpClient.MaxResponseContentBufferSize = int.MaxValue;
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(jiraCredentials));
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


            string transitionURL = "https://XXX.atlassian.net" + "/rest/api/2/issue/" + "QA-10" + "/transitions?expand=transitions.fields";
            string jsonString = "{ \"update\":{},\"transition\": { \"id\": \"" + "31" + "\"}, \"fields\": { } }";
            var sContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
            var httpClientt = new HttpClient();
            HttpResponseMessage transitionResponse = httpClientt.PostAsync(transitionURL, sContent).Result;
            httpClient.Dispose();

經過深入研究,我終於找到了正確的方法,即http請求。

如果有人遇到問題,這里有一個代碼:

 using (var httpClient = new HttpClient())
            {
                using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://XXX.atlassian.net/rest/api/2/issue/TST-4/transitions?expand=transitions.fields"))
                {
                    var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("user:token"));
                    request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");

                    request.Content = new StringContent("{\"transition\":{\"id\":\"31\"}}");
                    request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                    var response = await httpClient.SendAsync(request);
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM