刚刚在一家新公司开始,我们都使用Jira,客户决心不使用它,因为他们不喜欢它可以在一个不错的简单UI中记录票证并获取更新和评论。
现在我从未在2周前进行过任何编码,因此很难让我围绕C#和休息(为基本的IT修复了脚本,但从来没有像这样复杂!(
回到点,设置并与REST客户端设置REST API,但是每次我尝试从Jira上的票证中获取数据时,我都会收到错误:
{" errormessages":["您没有许可查看指定问题的权限。
这是表格中的代码:
private void button3_Click_1(object sender, EventArgs e)
{
var client = new RestClient("https://jira.eandl.co.uk/rest/api/2/issue/ITREQ-" + textBox1.Text
);
client.Authenticator = new SimpleAuthenticator("username", "abc", "password", "123");
var request = new RestRequest(Method.GET);
request.AddParameter("token", "saga001", ParameterType.UrlSegment);
// request.AddUrlSegment("token", "saga001");
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
var queryResult = client.Execute(request);
Console.WriteLine(queryResult.Content);
}
这是剩余客户端本身的代码:
public Restclient()
{
endPoint = string.Empty;
httpMethod = httpVerb.GET;
}
private string logonAttempt;
public string makeRequest()
{
string strResponseValue = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);
request.Method = httpMethod.ToString();
String authHeader = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(userName + ":" + userPassword));
request.Headers.Add("Authorization", authType.ToString() + " " + authHeader);
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
//Process the Response Stream... (Could be JSON, XML ot HTML etc...)
using (Stream responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (StreamReader reader = new StreamReader(responseStream))
{
strResponseValue = reader.ReadToEnd();
}//End of Stream Reader
}
}//end of Response Stream
}
catch (Exception ex)
{
strResponseValue = "("errorMessages":["" + ex.Message.ToString() + ""],"errors":{}}";
}
finally
{
if(response != null)
{
((IDisposable)response).Dispose();
}
}
return strResponseValue;
}
}
}
现在显然我希望我错过了一些绝对的大吉尔纳,就像我所说的那样,我从未从事过这样的项目,并且有0个经验。
只是寻找某人直言不讳地告诉我我在做什么错
根据答案更改为此:
private void button3_Click_1(object sender, EventArgs e)
{
var client = new
RestClient("https://jira.eandl.co.uk/rest/api/2/issue/ITREQ-" + textBox1.Text
);
client.Authenticator = new HttpBasicAuthenticator("username", "password");
var request = new RestRequest(Method.GET);
string authHeader = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("cdale!" + ":" + "Chantelle95!"));
request.AddHeader("Authorization", "Basic " + authHeader);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
var queryResult = client.Execute(request);
Console.WriteLine(queryResult.Content);
}
默认情况下使用JIRA REST API,您可以使用基本身份验证或OAuth2。我认为您将使用基本的方法更简单的方法。
我不确定为什么您有一个定义自定义RestClient
的课程,因为第一个代码块使用 restsharp 从http://restsharp.org。
在这种情况下,您需要修改身份验证器:
client.Authenticator = new HttpBasicAuthenticator(userName, password);
我认为您应该删除指定token
的线路。我不认为这是必需的。
最后,Restclient
类似乎不使用,然后将其删除。
您还可以使用您在自定义restclient中创建的内容并手动指定基本标头:
string authHeader = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(userName + ":" + userPassword));
request.AddHeader("Authorization", "Basic " + authHeader);
但是,这本质上是HttpBasicAuthenticator
类的行为。
如果您不想在每个请求中编码您的凭据是使用cookie进行操作的方法。
请求cookie时,您不需要在标题上添加任何授权。此方法将接受带有用户名和密码和URL的JSON字符串。它将返回cookie值。
public async Task<JiraCookie> GetCookieAsync(string myJsonUserNamePassword, string JiraCookieEndpointUrl)
{
using (var client = new HttpClient())
{
var response = await client.PostAsync(
JiraCookieEndpointUrl,
new StringContent(myJsonUserNamePassword, Encoding.UTF8, "application/json"));
var json = response.Content.ReadAsStringAsync().Result;
var jiraCookie= JsonConvert.DeserializeObject<JiraCookie>(json);
return jArr;
}
}
public class JiraCookie
{
public Session session { get; set; }
}
public class Session
{
public string name { get; set; }
public string value { get; set; }
}
我使用url来调用它:http://[basejiraurl]/rest/auth/1/session返回以下JSON响应:
{
"session" : -{
"name" : JSESSIONID,
"value" : cookieValue
}
请记住,上面的URL在我使用的JIRA版本中是有效的,并且可能会根据您使用的版本而有所不同。阅读有关您正在使用的版本的正确URL的JIRA API文档。我正在使用以下内容:https://docs.atlassian.com/software/jira/docs/api/rest/7.6.1/#auth/1/session
请记住,您必须存储cookie并在随后的每个请求中使用它。查看此答案有关如何将cookie添加到您的httpclient请求中:如何在httpclient的httprequestmessage上设置cookie。
完成了cookie(登录(后,只需发送与帖子相同URL的删除HTTP请求。
参考:https://stackoverflow.com/a/49109192/7763903