Как обновить сводку задач jira через остальные API с помощью restsharp

Я играл с jira rest api, чтобы в конечном итоге заменить реализацию мыла в приложении С# с использованием 4.0 .net framework. Я также использую RestSharp.

Хотя у меня не было проблем с получением проблемы или поиском проблемы с остальными API, я дергал себя за волосы с обновлением проблемы jira. Это мои методы выполнения, они отлично работают для получения или поиска задач jira. Обычное сообщение об ошибке, которое я получаю, когда я вызываю SetJiraIssue, выглядит следующим образом {"errorMessages":["одно из "полей" или "обновление" требуется"],"ошибки":{}}.

Если я передам простой пример строки JSOn (string jSonContent = @"{""Fields"":{""summary"":"" обновление сводки тестирования""}}") в тело запроса, то он жалуется, что для него нет конструктора.

Кто-нибудь там как идея, что я делаю неправильно? Комментарии и предложения приветствуются

  private string Execute(RestRequest request)
    {
        var client = new RestClient(_jiraUrl);

        client.Authenticator = new HttpBasicAuthenticator(_accountId, _password);
        request.AddParameter("AccountSid", _accountId, ParameterType.UrlSegment);
        var response = client.Execute(request);

        if (response.ErrorException != null)
        {
            const string message = "Error retrieving response.  Check inner details for more info.";
            var jiraManagerException = new ApplicationException(message, response.ErrorException);
            throw jiraManagerException;
        }

        return response.Content;

    }

    /// <summary>
    /// Executes a jira rest call and retuns the response if any as a business object.
    /// </summary>
    /// <typeparam name="T">Type of the return type for deserialization.</typeparam>
    /// <param name="request">THe reste request.</param>
    /// <returns></returns>
    private T Execute<T>(RestRequest request) where T : new()
    {
        var client = new RestClient(_jiraUrl);
        client.Authenticator = new HttpBasicAuthenticator(_accountId, _password);
        request.AddParameter("AccountSid", _accountId, ParameterType.UrlSegment);
        var response = client.Execute<T>(request);

        if (response.ErrorException != null)
        {
            const string message = "Error retrieving response.  Check inner details for more info.";
            var jiraManagerException = new ApplicationException(message, response.ErrorException);
            throw jiraManagerException;
        }

        return response.Data;
    }


 public void SetJiraIssue(string issueKey, JiraIssue j)
    {
        RestRequest request = new RestRequest("issue/{key}", Method.PUT);
        request.AddUrlSegment("key", issueKey);
        request.RequestFormat = DataFormat.Json;
        request.AddHeader("Content-type", "application/json");
        j.Summary = "modifiying this issue";


        request.AddBody(j);

        var response = Execute(request);
        Console.WriteLine(response);
    }

person legrandviking    schedule 15.07.2013    source источник


Ответы (1)


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

public void SetJiraIssue(string issueKey, JiraIssue j)
    {
        RestRequest request = new RestRequest("issue/{key}", Method.PUT);
        request.AddUrlSegment("key", issueKey);
        request.RequestFormat = DataFormat.Json;

        string jSonContent = @"{""fields"":{""summary"":""test changing summary""}}";
        request.AddParameter("application/json", jSonContent, ParameterType.RequestBody);

        var response = Execute(request);
        Console.WriteLine(response);
    }
person legrandviking    schedule 16.07.2013