使用 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);
}
我正在开发一个应用程序,用户可以在其中 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);
}