使用 Jira 创建问题

Create Issue with Jira

我正在开发一个应用程序,用户可以在其中 post 发布问题等等。我可以 post 使用基本身份验证通过 Postman 解决问题并 posting 这个原始 application/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":["意外字符('''(代码 39)):期望双引号在 [Source: org.apache.catalina.connector.CoyoteInputStream@ae77320 处开始字段 name\n;行:2,列:7]"]}"

我认为是数据文件出了问题。当我进一步了解时,我会更新。

我认为您可能需要 "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);

我修好了:)。这是数据文件。如果您使用它,这应该会起作用。我还添加了 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);
    }