Создание проблемы Jira REST API (400 неправильных запросов) - PullRequest
0 голосов
/ 06 февраля 2019

Проблема

Я пытаюсь создать вызов API REST, используя запрос HttpWebRequest к нашему внутреннему серверу Jira.Но почему-то я продолжаю получать ошибку (400) Bad Request.Я также пробовал с WebClient и другими способами, но я просто не могу найти правильный подход.Есть предложения?

URL правильный

Пользователь правильный

Пароль правильный

Данные JSON также правильно

Должен быть другой способ доступа к удаленному серверу, верно?Я искал, но, похоже, не нашел решения.

Мой код

public static void CreateJiraRequest(JiraApiObject.RootObject 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();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

JSON

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

Исключение

Исключение возникает, когдавход в блок try на request.GetResponse();

Дополнительная информация : удаленный сервер возвратил ошибку: (400) Bad Request.

Посетите Jira Wiki здесь

1 Ответ

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

Решение

Проблема в приведенном выше коде заключается в том, что Jira требует закодированные учетные данные .Без кодирования учетных данных сервер Jira вернет ошибку 400 Bad Request без какой-либо конкретной информации.

Я написал две новые функции, одну для запроса API и одну для кодирования учетных данных.

API Call

public static string PostJsonRequest(string endpoint, string userid, string password, string json)
    {
        // Create string to hold JSON response
        string jsonResponse = string.Empty;

        using (var client = new WebClient())
        {
            try
            {
                client.Encoding = System.Text.Encoding.UTF8;
                client.Headers.Set("Authorization", "Basic " + GetEncodedCredentials(userid, password));
                client.Headers.Add("Content-Type: application/json");
                client.Headers.Add("Accept", "application/json");
                var uri = new Uri(endpoint);
                var response = client.UploadString(uri, "POST", json);
                jsonResponse = response;
            }
            catch (WebException ex)
            {
                // Http Error
                if (ex.Status == WebExceptionStatus.ProtocolError)
                {
                    HttpWebResponse wrsp = (HttpWebResponse)ex.Response;
                    var statusCode = (int)wrsp.StatusCode;
                    var msg = wrsp.StatusDescription;
                    throw new HttpException(statusCode, msg);
                }
                else
                {
                    throw new HttpException(500, ex.Message);
                }
            }
        }

        return jsonResponse;
    }

Функция кодирования

private static string GetEncodedCredentials(string userid, string password)
{
    string mergedCredentials = string.Format("{0}:{1}", userid, password);
    byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(mergedCredentials);
    return Convert.ToBase64String(byteCredentials);
}
...