簡體   English   中英

C#通過JSON和REST API將監視程序添加到Jira isse

[英]C# Adding watcher to Jira isse via JSON and REST API

嘗試將監視程序添加到現有的Jira問題時,我的JSON字符串存在語法問題,但是我無法弄清楚它是什么。

string URL = "http://jira/rest/api/2/issue/TS-1000/watchers"
string JSON = @"{{""watchers"":[{{""name"":""jdoe""}}]}}"

當我通過POST將JSON提交到URL時,我得到了BAD REQUEST 400並且The request sent by the client was syntactically incorrect

我已經通過驗證器運行了JSON,結果很好。 我還嘗試了其他方法,例如“用戶名”而不是“名稱”,在用戶名周圍加上了更多引號,例如""""jdoe"""" ,在提交時會產生""jdoe"" ,等等,但似乎沒有任何作用有所不同。

在該程序的其他地方,我可以創建和關閉Jira票證-因此,我知道我的HTTPREQUEST和Authentication代碼很好(因此,為什么不發布它)。

我已經研究了這個問題,並且有很多有關CURL的示例,但這對我不是很有幫助。

僅當使用此類字符串作為String.Format參數時,才需要將{{ 因此,如果您只想發送常量字符串,請使用單個大括號,例如`@“ {”“ watchers”“:[{”“ name”“:”“ jdoe”“}]}}”。

請注意,最好使用JSON序列化器生成有效的JSON。 通常,JSON.Net是一個不錯的選擇:

 var jsonString = JsonConvert.SerializeObject(
         new {watchers = new []{new {name = "jdoe"}}})

看起來這行不通,這是一個長期存在的錯誤,請參見此處。
https://jira.atlassian.com/browse/JRASERVER-29304

您將不得不更改為使用https://yourInstance.com/rest/api/2/issue/ {IssueId} / watchers

數據將是您的經過驗證的用戶,並用雙引號括起來““” myuser.lastname“”“

“”“ myuser.lastname”“” https://yourInstance.com/rest/api/2/issue/ {IssueId} / watchers

這與大多數其他請求不同,這讓我發瘋了幾個小時。 我使用的是.net,我必須用引號將用戶名格式化,然后將其傳遞給包裝HTTPWebRequest的方法。 我使用一種簡單的方法將數據推送到request.getRequestStream中。

public string RunIt(string queryString, string data = null, string method = "GET")
{
string uriString = string.Format("{0}{1}", m_BaseUrl, queryString.ToString());
Uri uri = new Uri(uriString);
HttpWebRequest request = WebRequest.Create(uriString) as HttpWebRequest;
request.ContentType = "application/json";
request.Method = method;
if (data != null)
{
    using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
    {
        writer.Write(data);
    }
}
string base64Credentials = GetEncodedCredentials();
request.Headers.Add("Authorization", Convert.ToString("Basic ") + base64Credentials);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.NoContent)
    return "204";
string result = string.Empty;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    result = reader.ReadToEnd();
}
return result;
}

嘗試:

string URL = "http://jira/rest/api/2/issue/TS-1000/watchers"
string JSON = @""jdoe""

此請求的JSON格式有點奇怪。 為了使用此API請求添加觀察者, JSON主體必須只是Jira用戶名(帶引號的字符串)

您可以在API文檔中看到此規范。 圈出添加觀察者Jira API規范

最近,當我嘗試使用C#腳本通過Jira API添加觀察者時,我不得不弄清楚這個小難題。 以下是我在腳本中最終使用的功能->

public static void assignWatcher(string issueKey, string watcher, JiraServerInfo JInfo)
    {
        var client = new RestClient(JInfo.JServerName + "rest/api/2/issue/" + issueKey + "/watchers");
        var request = new RestRequest(Method.POST);
        request.AddHeader("content-type", "application/json");
        request.AddHeader("Authorization", "Basic " + System.Convert.ToBase64String(Encoding.UTF8.GetBytes(JInfo.JUsername + ":" + JInfo.JPassword)));
        request.AddParameter("application/json", "\"" + watcher + "\"\n", ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);
    }

暫無
暫無

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

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