C# 4.0 如何使用restsharp通过RESTAPI更新jira问题摘要

C# 4.0 如何使用restsharp通过RESTAPI更新jira问题摘要,c#-4.0,restsharp,jira-rest-java-api,C# 4.0,Restsharp,Jira Rest Java Api,我一直在玩弄jirarestapi,最终在一个使用4.0.net框架的c#app中替换我的soap实现。我也在使用restsharp 虽然我在使用RESTAPI获取问题或搜索问题方面没有问题,但我一直在更新jira问题。这些是我的执行方法,它们可以很好地用于获取或搜索jira问题。调用SetJiraIssue时收到的常见错误消息是以下{“errorMessages”:[“需要'fields'或'update'中的一个”],“errors”:{} 如果我将一个简单的JSOn字符串execample

我一直在玩弄jirarestapi,最终在一个使用4.0.net框架的c#app中替换我的soap实现。我也在使用restsharp

虽然我在使用RESTAPI获取问题或搜索问题方面没有问题,但我一直在更新jira问题。这些是我的执行方法,它们可以很好地用于获取或搜索jira问题。调用SetJiraIssue时收到的常见错误消息是以下{“errorMessages”:[“需要'fields'或'update'中的一个”],“errors”:{}

如果我将一个简单的JSOn字符串execample(字符串jSonContent=@“{”“Fields”“:{”“summary”“:”“testing summary update”“}”)传递给请求主体,那么它会抱怨没有用于它的构造函数

有人知道我做错了什么吗?欢迎提出意见和建议

  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);
    }
私有字符串执行(重新请求请求)
{
var client=新的RestClient(_jiraUrl);
client.Authenticator=新的HttpBasicAuthenticator(\u accountId,\u password);
request.AddParameter(“AccountSid”,_accountId,ParameterType.urlsem分段);
var response=client.Execute(请求);
if(response.ErrorException!=null)
{
const string message=“检索响应时出错。有关详细信息,请检查内部详细信息。”;
var jiramanagerxception=newapplicationexception(消息,response.ErrorException);
抛圣战;
}
返回响应。内容;
}
/// 
///执行jira rest调用,并将响应(如果有)作为业务对象重新运行。
/// 
///用于反序列化的返回类型的类型。
///reste请求。
/// 
private T Execute(RestRequest请求),其中T:new()
{
var client=新的RestClient(_jiraUrl);
client.Authenticator=新的HttpBasicAuthenticator(\u accountId,\u password);
request.AddParameter(“AccountSid”,_accountId,ParameterType.urlsem分段);
var response=client.Execute(请求);
if(response.ErrorException!=null)
{
const string message=“检索响应时出错。有关详细信息,请检查内部详细信息。”;
var jiramanagerxception=newapplicationexception(消息,response.ErrorException);
抛圣战;
}
返回响应数据;
}
public void SetJiraIssue(字符串issueKey,JiraIssue j)
{
RestRequest请求=新的RestRequest(“issue/{key}”,Method.PUT);
request.AddUrlSegment(“key”,issueKey);
request.RequestFormat=DataFormat.Json;
AddHeader(“内容类型”、“应用程序/json”);
j、 Summary=“修改此问题”;
请求.AddBody(j);
var响应=执行(请求);
控制台写入线(响应);
}

我终于找到了让它工作的方法,这并不是我所期望的或希望它工作的方式,但这是我找到的唯一方法。希望这对其他人有用

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);
    }