Как правильно вызвать Jira Rest API - PullRequest
0 голосов
/ 04 февраля 2019

Я пытался настроить функцию для вызова Jira Rest API с параметрами, чтобы затем создать проблему в Jira.Для вызова API отдыха Jira предоставила документацию, в которой описано, как вызывать API отдыха здесь .На сайте указаны CURL и JSON.Вот запрос REST API, который я пытался настроить в C#:

curl -D- -u peno.ch:yourpassword -H "Content-Type: application/json" --data @foo.json https://jira-test.ch.*******.net/rest/api/latest/issue/

Это полезная нагрузка foo.json:

{
    "fields": {
   "project":
   {
      "key": "FOO"
   },
   "summary": "Test the REST API",
   "issuetype": {
      "name": "Task"
   }
  }
 }

Я пытался реализовать HttpWebRequest для вызова API отдыха, а также я попытался с WebClient.Никто из них не работал.Я вроде понимаю API, но думаю, что у меня не все параметры правильно, я думаю, что я делаю что-то не так.Также в Google я не нашел никакого решения.

Я получаю внутреннюю ошибку от Jira при выполнении функции ниже.(нет конкретной информации об ошибке)

public static void CreateJiraRequest(JiraApiObject jiraApiObject)
{
    string url = "https://jira-test.ch.*******.net/rest/api/latest/issue/";
    string user = "peno.ch";
    string password = "****";

    var client = new WebClient();        
    string data = JsonConvert.SerializeObject(jiraApiObject);
    client.Credentials = new System.Net.NetworkCredential(user, password);
    client.UploadStringTaskAsync(url, data);
}

Это мой JiraApiObject, который точно переводит в полезную нагрузку Json, показанную выше.

public class JiraApiObject
{
    public class Project
    {
        public string key { get; set; }
    }

    public class Issuetype
    {
        public string name { get; set; }
    }

    public class Fields
    {
        public Project project { get; set; }
        public Issuetype issuetype { get; set; }
        public string summary { get; set; }
    }

    public class RootObject
    {
        public Fields fields { get; set; }
    }
}

Когда я выполняю команду CURL на консоли всеРаботы, которые я просто не мог понять, как структурировать WebClient или HttpWebRequest.

Я обнаружил, что многие пользователи Jira сталкиваются с этой проблемой, и в Интернете нет ни одного хорошего решения, которое я мог бы найти.Я надеюсь найти решение и помочь другим, у кого возникла такая же проблема, подняв этот вопрос.

1 Ответ

0 голосов
/ 04 февраля 2019

Как правило, рекомендуется (часто необходимо) явно указывать тип содержимого, метод HTTP и т. Д. При каждом вызове API REST.Также я предпочитаю использовать объект HttpWebRequest для выполнения вызовов REST API.Вот пересмотренный код:

public static void CreateJiraRequest(Chat jiraApiObject)
{
    string url = "https://jira-test.ch.*******.net/rest/api/latest/issue/";
    string user = "peno.ch";
    string password = "****";

    var request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.ContentType = "application/json";
    request.Credentials = new System.Net.NetworkCredential(user, password);

    string data = JsonConvert.SerializeObject(jiraApiObject);

    using (var webStream = request.GetRequestStream())
    using (var requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII))
    {
        requestWriter.Write(data);
    }

    try
    {
        var webResponse = request.GetResponse();
        using (var responseReader = new StreamReader(webResponse.GetResponseStream()))
        {
            string response = responseReader.ReadToEnd();
            // Do what you need to do with the response here.
        }
    }
    catch (Exception ex)
    {
        // Handle your exception here
        throw ex;
    }
}

Кроме того, убедитесь, что структура JSON после сериализации JiraApiObject соответствует требуемой структуре JSON рассматриваемого API.Для вашего удобства вы можете рассмотреть возможность использования атрибутов JsonObject и JsonProperty для классов и свойств, чтобы вы называли их так, как ожидает API.

...