[英]Post attachment to Jira using REST API in c#
I Have a problem. 我有个问题。 When I want to POST some attachment to JIRA using REST API i have a Web Exception with 404 code (not found).
当我想使用REST API将一些附件发布到JIRA时,我有一个带有404代码的Web异常(未找到)。 My method takes CookieContainer to authenticate User.
我的方法使用CookieContainer来验证用户。 This is my code:
这是我的代码:
HttpWebResponse response;
string path = "C:\\Users\\xxxx\\Documents\\nowy.txt";
var boundary = string.Format("----------{0:N}", Guid.NewGuid());
request.CookieContainer = new CookieContainer();
foreach (Cookie c in responseCookies)
request.CookieContainer.Add(c);
request.ContentType = String.Format("multipart/form-data; boundary={0}", boundary);
request.Method = "POST";
request.Headers.Add("X-Atlassian-Token: nocheck file=@my_file.txt");
request.Headers.Add("charset", "UTF-8");
request.KeepAlive = false;
var fileContent = File.ReadAllBytes(path);
request.ProtocolVersion = HttpVersion.Version10;
using(var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(fileContent);
}
response = request.GetResponse() as HttpWebResponse;
Stream s = response.GetResponseStream();
I used for many support, but any resolved my problem. 我用过许多支持,但任何解决了我的问题。 So do you have some idea?
你有什么想法吗?
EDIT 1 编辑1
now Jira returns 200 code but attachment was not added.. can you tell me what's wrong in my code? 现在Jira返回200个代码,但没有添加附件..你能告诉我我的代码有什么问题吗?
public void AddAtachment(CookieCollection responseCookies)
{
request.CookieContainer = new CookieContainer();
foreach (Cookie c in responseCookies)
request.CookieContainer.Add(c);
Console.Write(request.RequestUri);
HttpWebResponse response;
string fileUrl = @"C:\Users\xxxx\Documents\nowy.txt";
var boundary = string.Format("----------{0:N}", Guid.NewGuid());
request.ContentType = String.Format("multipart/form-data; boundary={0}", boundary);
request.Method = "POST";
request.Headers.Add("X-Atlassian-Token", "nocheck");
MemoryStream postDataStream = new MemoryStream();
StreamWriter postDataWriter = new StreamWriter(postDataStream);
postDataWriter.Write("\r\n--" + boundary + "\r\n");
postDataWriter.Write("Content-Disposition: form-data;"
+ "@file=\"{0}\";"
+ "filename=\"{1}\""
+ "\r\nContent-Type: {2}\r\n\r\n",
"myFile",
Path.GetFileName(fileUrl),
Path.GetExtension(fileUrl));
postDataWriter.Flush();
FileStream fileStream = new FileStream(fileUrl, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
postDataStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();
postDataWriter.Write("\r\n--" + boundary + "--\r\n");
postDataWriter.Flush();
request.ContentLength = postDataStream.Length;
using (Stream s = request.GetRequestStream())
{
postDataStream.WriteTo(s);
}
postDataStream.Close();
response = request.GetResponse() as HttpWebResponse;
StreamReader responseReader = new StreamReader(response.GetResponseStream());
string reply = responseReader.ReadToEnd();
Console.Write(reply);
}
Possible duplicate of How to POST attachment to JIRA using REST API? 可能重复如何使用REST API POST附件到JIRA? .
。
From what I can see, your problem is in the Content-Disposition header. 从我所看到的,您的问题在Content-Disposition标头中。 RFC-1867 expects the form-data name to be "file" and nothing else.
RFC-1867要求表单数据名称为“文件”而不是其他内容。 For more details, look at the post on Atlassian Forums: https://answers.atlassian.com/questions/104822/jira-rest-api-attachment-incoherent-result .
有关更多详细信息,请查看Atlassian论坛上的帖子: https : //answers.atlassian.com/questions/104822/jira-rest-api-attachment-incoherent-result 。
You may take a look at my answer provided on the Duplicate post: https://stackoverflow.com/a/18489214/424059 您可以查看我在Duplicate帖子上提供的答案: https : //stackoverflow.com/a/18489214/424059
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.