C# HttpClient未返回URI的json值
我正在尝试使用HttpClient从Jira获取信息,但我无法看到任何信息。我希望能够获得与某些过滤器匹配的所有bug,以便将它们添加到程序中的表中 我曾尝试使用RESTAPI访问Jira,但每次访问时都表示问题或项目不存在。问题是,如果我在浏览器顶部的栏中输入URI,我可以看到我想要的JSON文本。这使我相信,我的代码不返回这些值的原因是授权问题。我正在使用基本身份验证发送凭据。我还想补充一点,我在cmd中使用cURL来用basicauth测试我的凭证,而且效果很好C# HttpClient未返回URI的json值,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试使用HttpClient从Jira获取信息,但我无法看到任何信息。我希望能够获得与某些过滤器匹配的所有bug,以便将它们添加到程序中的表中 我曾尝试使用RESTAPI访问Jira,但每次访问时都表示问题或项目不存在。问题是,如果我在浏览器顶部的栏中输入URI,我可以看到我想要的JSON文本。这使我相信,我的代码不返回这些值的原因是授权问题。我正在使用基本身份验证发送凭据。我还想补充一点,我在cmd中使用cURL来用basicauth测试我的凭证,而且效果很好 public async
public async Task<JiraModel> GetBugs()
{
using (var client = new HttpClient())
{
string url = "https://myurl.atlassian.net/rest/api/3/project/VCMF";
String username = "username";
String password = "apikey";
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("UTF-8").GetBytes(username + ":" + password));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "Basic " + encoded);
client.BaseAddress = new Uri("https://myurl.atlassian.net/rest/api/3/project/VCMF");
var response = await client.GetAsync(url);
var content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<JiraModel>(content);
}
}
公共异步任务GetBugs()
{
使用(var client=new HttpClient())
{
字符串url=”https://myurl.atlassian.net/rest/api/3/project/VCMF";
字符串username=“username”;
字符串password=“apikey”;
String encoded=System.Convert.ToBase64String(System.Text.Encoding.GetEncoding(“UTF-8”).GetBytes(用户名+”:“+密码));
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“授权”、“基本”+编码);
client.BaseAddress=新Uri(“https://myurl.atlassian.net/rest/api/3/project/VCMF");
var response=wait client.GetAsync(url);
var content=await response.content.ReadAsStringAsync();
返回JsonConvert.DeserializeObject(内容);
}
}
在这段代码结束时,我应该得到字符串形式的json结果,但我一直得到一个404错误,而对于这段代码,该错误明确表示“找不到具有键“VCMF”的项目。”这里的问题是您创建的授权头不正确 用于
AuthenticationHeaderValue
类的构造函数接受两个参数:scheme和parameter:
public AuthenticationHeaderValue(string scheme, string parameter)
{
}
第一个参数应该是scheme(本例中为Basic),第二个参数是base64编码的凭据:
因此,不是:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "Basic " + encoded);
应该是:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encoded);
希望这有帮助 使用curl时是否使用base64编码冒号?@HereticMonkey我可以使用实际凭据或base64 UTF8编码凭据获取curl中的json脚本。我使用的说明如下:看起来他们想要冒号编码。。。奇怪的这就是我的想法:)。但有一件事;你可能想读。。。