通过 C# 更新 JIRA 问题状态时面临“401:Unauthorized”问题
Facing '401:Unauthorized' issue when updating JIRA issue status through C#
我正在尝试使用 C# 代码更新 JIRA 中问题的状态。我找到了各种相同的curl代码,但由于我不熟悉curl,所以我将代码转换为C#。
现在,我面临的第一个错误是“状态代码:401”、“未经授权”。我正在使用电子邮件和 API 令牌进行授权。搜索并通读了所有 blogs/questions,发现了非常相似的问题,但无法找出我的代码的问题。
我也是 C# 和 Jira 环境的新手,如果你能帮我找出错误就太好了。或者如果我在代码中遗漏了什么?
查看下面的代码:
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("PUT"), "https://<myhostname>.atlassian.net/rest/api/2/issue/<project>-<issueno>"))
{
var username = "<my-email>";
var password = "<API Token>";
var base64authorization = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
request.Content = new StringContent("{\"transition\":{\"id\":\"11\"}}");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
var response = await httpClient.SendAsync(request);
Console.WriteLine(response);
}
}
编辑:
将“Basic”替换为“Bearer”解决了 401 错误,但现在收到“400 Bad Request”错误。弄清楚这是因为我们传递了 JSON 来更新问题,所以在那里做了一些改变。现在我只是想更新问题的摘要。谁能帮我找到原因并解决问题?
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("PUT"), "https://<host-url>/rest/api/2/issue/<issue-key>"))
{
var username = "<username>";
var password = "<API Key>";
string data = @"{'update' : {'summary' : [{'set' : 'Big block Chevy'}]}}";
var base64authorization = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"));
request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {base64authorization}");
request.Content = new StringContent($"{data}");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
var response = await httpClient.SendAsync(request);
Console.WriteLine(response);
}
}
谢谢
巴哈纳
您正在使用 Encoding.ASCII.GetBytes
来获取字符串的字节表示,但您应该使用 Encoding.UTF8.GetBytes
,因为这是 ToBase64String
所期望的。更改代码的那部分应该可以解决它。
我终于通过将代码更改为 Encoding.UTF8.GetBytes 解决了“401 Unauthorized”问题,但这并没有帮助我。在下一行中将“Basic”替换为“Bearer”确实帮助我解决了 401 错误。
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
感谢您的帮助。
我正在尝试使用 C# 代码更新 JIRA 中问题的状态。我找到了各种相同的curl代码,但由于我不熟悉curl,所以我将代码转换为C#。
现在,我面临的第一个错误是“状态代码:401”、“未经授权”。我正在使用电子邮件和 API 令牌进行授权。搜索并通读了所有 blogs/questions,发现了非常相似的问题,但无法找出我的代码的问题。
我也是 C# 和 Jira 环境的新手,如果你能帮我找出错误就太好了。或者如果我在代码中遗漏了什么?
查看下面的代码:
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("PUT"), "https://<myhostname>.atlassian.net/rest/api/2/issue/<project>-<issueno>"))
{
var username = "<my-email>";
var password = "<API Token>";
var base64authorization = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
request.Content = new StringContent("{\"transition\":{\"id\":\"11\"}}");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
var response = await httpClient.SendAsync(request);
Console.WriteLine(response);
}
}
编辑: 将“Basic”替换为“Bearer”解决了 401 错误,但现在收到“400 Bad Request”错误。弄清楚这是因为我们传递了 JSON 来更新问题,所以在那里做了一些改变。现在我只是想更新问题的摘要。谁能帮我找到原因并解决问题?
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("PUT"), "https://<host-url>/rest/api/2/issue/<issue-key>"))
{
var username = "<username>";
var password = "<API Key>";
string data = @"{'update' : {'summary' : [{'set' : 'Big block Chevy'}]}}";
var base64authorization = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"));
request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {base64authorization}");
request.Content = new StringContent($"{data}");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
var response = await httpClient.SendAsync(request);
Console.WriteLine(response);
}
}
谢谢
巴哈纳
您正在使用 Encoding.ASCII.GetBytes
来获取字符串的字节表示,但您应该使用 Encoding.UTF8.GetBytes
,因为这是 ToBase64String
所期望的。更改代码的那部分应该可以解决它。
我终于通过将代码更改为 Encoding.UTF8.GetBytes 解决了“401 Unauthorized”问题,但这并没有帮助我。在下一行中将“Basic”替换为“Bearer”确实帮助我解决了 401 错误。
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
感谢您的帮助。