我一直在试图建立一个函数来调用吉拉REST API与参数,然后就可以在JIRA中创建一个问题。要调用REST API吉拉提供介绍如何调用REST API here一个文档。在网站上,卷曲和JSON中给出。这里是我试图建立在C#
的REST API请求:
curl -D- -u peno.ch:yourpassword -H "Content-Type: application/json" --data @foo.json https://jira-test.ch.*******.net/rest/api/latest/issue/
这是foo.json有效载荷:
{
"fields": {
"project":
{
"key": "FOO"
},
"summary": "Test the REST API",
"issuetype": {
"name": "Task"
}
}
}
我试图实现一个HttpWebRequest
调用REST API,也是我有一个WebClient
尝试。他们没有工作。我有点明白了API,但我觉得我还没有得到正确的参数,我想我做的事情错了。同样在谷歌,我没有找到任何解决方案。
我从吉拉执行以下功能时得到一个内部错误。 (有关该错误没有特定信息)
public static void CreateJiraRequest(JiraApiObject jiraApiObject)
{
string url = "https://jira-test.ch.*******.net/rest/api/latest/issue/";
string user = "peno.ch";
string password = "****";
var client = new WebClient();
string data = JsonConvert.SerializeObject(jiraApiObject);
client.Credentials = new System.Net.NetworkCredential(user, password);
client.UploadStringTaskAsync(url, data);
}
这是我的JiraApiObject这正好转换为上面显示JSON的有效载荷。
public class JiraApiObject
{
public class Project
{
public string key { get; set; }
}
public class Issuetype
{
public string name { get; set; }
}
public class Fields
{
public Project project { get; set; }
public Issuetype issuetype { get; set; }
public string summary { get; set; }
}
public class RootObject
{
public Fields fields { get; set; }
}
}
当我在控制台上的一切执行curl命令的作品我只是无法弄清楚如何构建WebClient
或HttpWebRequest
。
我发现许多用户吉拉面对这个问题并没有一个很好的解决方案,我可以在互联网上找到。我希望能找到一个解决方案,并通过提高这个问题,帮助别人谁也有同样问题。
在一般情况下,它的最佳实践(很多需要一个次)明确指定的内容类型,HTTP方法,等等,只要你做一个REST API调用。此外,我更喜欢使用HttpWebRequest对象进行REST API调用。这里是重新分解代码:
public static void CreateJiraRequest(Chat jiraApiObject)
{
string url = "https://jira-test.ch.*******.net/rest/api/latest/issue/";
string user = "peno.ch";
string password = "****";
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.Credentials = new System.Net.NetworkCredential(user, password);
string data = JsonConvert.SerializeObject(jiraApiObject);
using (var webStream = request.GetRequestStream())
using (var requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII))
{
requestWriter.Write(data);
}
try
{
var webResponse = request.GetResponse();
using (var responseReader = new StreamReader(webResponse.GetResponseStream()))
{
string response = responseReader.ReadToEnd();
// Do what you need to do with the response here.
}
}
catch (Exception ex)
{
// Handle your exception here
throw ex;
}
}
此外,确保连载JiraApiObject后的JSON结构有问题的API的要求JSON结构相匹配。为了您的方便,你可能想使你的名字他们预计API的方式考虑使用的JSONObject和JsonProperty的类和属性属性。