【问题标题】:Create Issue with Jira使用 Jira 创建问题
【发布时间】:2019-12-11 14:18:13
【问题描述】:

我正在制作一个应用程序,用户可以在其中发布问题等等。我可以使用基本身份验证通过 Postman 发布问题并发布此原始应用程序/json

更新 我已经取得了进展,通过这种方法我得到了基本的身份验证无效错误。但是...我仍然有 400 Bad request 错误。现在的代码是:

public async Task<string> PostIssueAsync(string username, string password)
    {
        string data = @"{
                'fields': {
                   'project':
                   {
                        'key': 'TEST'
                   },
                   'summary': 'zfasf',
                   'description': 'Creating an issue while setting custom field values via projhect ',
                   'issuetype': {
                        'name': 'Fault'
                   }
                        }
                    }";

        HttpClient client = new HttpClient();

        client.BaseAddress = new System.Uri(Constants.JiraUrl + "rest/api/latest/issue");
        var cred = GetEncodedCredentials(username, password);

        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", cred);

        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var content = new StringContent(data, Encoding.UTF8, "application/json");
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var response = client.PostAsync(client.BaseAddress, content).Result;

        if (response.IsSuccessStatusCode)
        {
        }
        else
        {
            var test = response.Content.ReadAsStringAsync().Result;
        }
        return "";
    }

错误: 在 else 语句中,我使用 ReadAsStringAsync 来查看错误。错误是:"{"errorMessages":["Unexpected character (''' (code 39)): was expecting double-quote to start field name\n at [Source: org.apache.catalina.connector.CoyoteInputStream@ae77320 ;行:2,列:7]"]}"

我认为数据文件出错了。我会在进一步的时候更新。

【问题讨论】:

  • 您能否将 var json 的输出发布到问题中,以便我可以更好地帮助您?
  • = new AuthenticationHeaderValue("Basic"
  • @Eldar 基本身份验证标头需要空格
  • @craigster 在底部添加了 var json

标签: c# json rest jira jira-rest-api


【解决方案1】:

我认为您可能需要“Encoding.ASCII”部分而不是“Encoding.UTF8”。

也将其转换为字节数组可能会有所帮助。

此代码对我有用。

    System.Net.WebClient cli = new System.Net.WebClient();
    string authInfo = My.Settings.username + ":" + My.Settings.password;
    cli.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)));
    cli.Headers.Add("Content-Type", "application/json");

    var bytes = Encoding.Default.GetBytes(jsonstringpayload);
    webClient.UploadDataAsync("http://support.example.com:8080/rest/" + url, "POST", bytes);

【讨论】:

  • 我仍然收到“值的格式'基本无效”作为错误。因此,我无法在该方法中走得更远并检查它是否上传了问题
【解决方案2】:

我修好了:)。那是数据文件。如果您使用它,这应该可以工作。我还添加了 GetEncodedCredentiels 方法,因此您也可以使用它。谢谢大家的帮助!!

更新 我已经取得了进展,通过这种方法我得到了基本的身份验证无效错误。但是...我仍然有 400 Bad request 错误。现在的代码是:

public async Task<string> PostIssueAsync(string username, string password)
    {
                    string data = @"{
                ""fields"": {
                   ""project"":
                   {
                        ""key"": ""TEST""
                   },
                   ""summary"": ""test"",
                   ""description"": ""Creating an issue while setting custom field values via projhect"",
                   ""issuetype"": {
                        ""name"": ""Fault""
                   }
                        }
                    }";

        HttpClient client = new HttpClient();

        client.BaseAddress = new System.Uri(Constants.JiraUrl + "rest/api/latest/issue");
        var cred = GetEncodedCredentials(username, password);

        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", cred);

        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var content = new StringContent(data, Encoding.UTF8, "application/json");
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var response = client.PostAsync(client.BaseAddress, content).Result;

        if (response.IsSuccessStatusCode)
        {
        }
        else
        {
            var test = response.Content.ReadAsStringAsync().Result;
        }
        return "";
    }

GetEncodedCredentiels 方法:

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

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 2017-10-09
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多