Справка по Jira API C# HttpClient - PullRequest
0 голосов
/ 15 января 2020

Хорошо, я очень плохо знаком с использованием API в коде, и я смог использовать некоторые из них, которые на самом деле были довольно просты. Но ни один из них не требует аутентификации. Я пытался использовать службу REST API Jira через класс C# HttpClient. См. Код ниже:

public void UpdateJiraIssue(string issueValue)
        {
            string url = $@"http://jira.mySite.com/rest/api/2/issue/{issueValue}/editmeta";
            string jsonString = @"myNeatJsonData";
            var content = new StringContent(jsonString, Encoding.UTF8, "application/json");

            //Initialize Client
            HttpClient apiClient = new HttpClient();
            apiClient.BaseAddress = new System.Uri(url);
            apiClient.DefaultRequestHeaders.Accept.Clear();

            byte[] cred = UTF8Encoding.UTF8.GetBytes("username:password");
            apiClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(cred));
            apiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            async Task RunJiraAPI()
            {

                using (HttpResponseMessage resp = await apiClient.PostAsync("editmeta", content))
                {
                    if (resp.IsSuccessStatusCode)
                    {
                        var jsonSring = await resp.Content.ReadAsStringAsync();
                    }
                }
            }
            RunJiraAPI();

            return;
        }

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю ошибку 401 (Аутентификация). Вот что содержится в моем объекте «resp», когда я запускаю код:

resp: {StatusCode: 401, ReasonPhrase: ' ', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  X-AREQUESTID: 400x1314x1
  X-XSS-Protection: 1; mode=block
  X-Content-Type-Options: nosniff
  X-Frame-Options: SAMEORIGIN
  Content-Security-Policy: frame-ancestors 'self'
  X-ASEN: SEN-11158344
  X-AUSERNAME: anonymous
  Cache-Control: no-store, no-transform, no-cache
  Set-Cookie: atlassian.xsrf.token=B2ZY-C2JQ-1AGH-PBLW_5ccc79da5af8e6abcb9bff5250f3305af3b2877a_lout; Path=/; Secure
  WWW-Authenticate: OAuth realm="https%3A%2F%2Fjira.mySite.com"
  X-Powered-By: ARR/3.0
  X-Powered-By: ASP.NET
  Date: Wed, 15 Jan 2020 13:40:22 GMT
  Content-Length: 109
  Content-Type: application/json; charset=UTF-8
}}

Request Message: {Method: POST, RequestUri: 'https://jira.rhlan.com/rest/api/2/issue/RHD-1116/editmeta', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
  Authorization: Basic cWE6aGVjc29mdDEyMw==
  Accept: application/json
  Content-Type: Application/json; charset=utf-8
  Content-Length: 70
}}

Status Code: Unauthorized

Мне нужно немного поработать над строкой json, чтобы она работала правильно (вот почему я не включил на самом деле он содержит), но как только я получу сообщение об ошибке аутентификации, я, вероятно, на самом деле изменю что-то, чтобы выполнить проблему get Jira через API, чтобы я мог видеть все данные json, возвращенные таким образом. Тогда я отредактирую свою строку json соответственно.

Есть идеи, что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Вам нужно имя пользователя и api-токен. Ваш api-токен должен быть вашим паролем для входа.

0 голосов
/ 15 января 2020

Вы можете передавать учетные данные, предполагая, что у вас есть имя пользователя и токен API.

string credentials= string.Format("{0}:{1}", username, apitoken);
    byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(credentials);

И в вашем apiClient вы можете использовать его следующим образом.

apiClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteCredentials));
...