【发布时间】:2012-08-06 20:23:39
【问题描述】:
如何在 C# 中使用 JIRA REST API 和 HttpWebRequest 将附件 POST 到 JIRA?
来自documentation under /rest/api/2/issue/{issueIdOrKey}/attachments:
发布
为问题添加一个或多个附件。
此资源需要一个多部分的帖子。媒体类型的 multipart/form-data 在 RFC 1867 中定义。大多数客户端库都有使处理多部分帖子变得简单的类。例如,在 Java 中,Apache HTTP 组件库提供了一个 MultiPartEntity,使得提交多部分 POST 变得简单。
为了防止 XSRF 攻击,因为这个方法接受 multipart/form-data,所以它上面有 XSRF 保护。这意味着你必须在请求中提交一个 X-Atlassian-Token: nocheck 的 header,否则会被阻塞。
包含附件的multipart/form-data参数的名称必须是“文件”
上传名为“myfile.txt”的文件以发出 REST-123 的简单示例:
curl -D- -u admin:admin -X POST -H "X-Atlassian-Token: nocheck" -F "file=@myfile.txt" http://myhost.test/rest/api/2/issue/TEST-123/attachments
我有
foreach (JIRAAttachments attachm in attachments.attachments)
{
request = HttpWebRequest.Create(
logInformation.GetUri() + "/rest/api/2/issue/" + key + "/attachments"
) as HttpWebRequest;
request.Headers.Add("Authorization: Basic " + logInformation.GetEncodeAuthentication());
request.Method = "POST";
request.ContentType = "multipart/form-data";
request.Headers.Add("X-Atlassian-Token: nocheck file=@" + Path.GetFullPath(@"..\Attachments\" + attachm.filename));
request.KeepAlive = true;
request.Proxy = wp;
response = (HttpWebResponse)request.GetResponse();
Stream s = response.GetResponseStream();
FileStream fs = new FileStream(Path.GetFullPath(@"..\Attachments\" + attachm.filename), FileMode.Open);
byte[] write = new byte[256];
int count = fs.Read(write, 0, write.Length);
while (count > 0)
{
s.Write(write, 0, count);
count = fs.Read(write, 0, write.Length);
}
fs.Close();
s.Close();
response.Close();
}
但它返回一个 404 错误...
【问题讨论】:
-
你使用的是什么 REST 框架?
-
您能否提供文档中的报价链接?
-
对不起,我原来的问题应该更清楚......你使用什么 http 客户端框架来进行 REST 调用?第三方、Microsoft beta WEB.API 还是尝试使用默认的 Http 客户端?
-
stackoverflow.com/questions/10913817/… 的相关问题,但 docs.atlassian.com/jira/REST/latest/#id71040 是要使用的精确资源。我会从 studio.atlassian.com/svn/JRJC/trunk/… 开始,它有一个 testAddAttachment 方法