使用c#中的REST API将附件发布到Jira

我有个问题。 当我想使用REST API将一些附件发布到JIRA时,我有一个带有404代码的Webexception(未找到)。 我的方法采用CookieContainer来validation用户。 这是我的代码:

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(); 

我用了许多支持,但任何解决了我的问题。 你有什么想法吗?

编辑1

现在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); } 

可能重复如何使用REST API POST附件到JIRA? 。

从我所看到的,您的问题在Content-Disposition标头中。 RFC-1867要求表单数据名称为“文件”而不是其他内容。 有关更多详细信息,请查看Atlassian论坛上的post: https : //answers.atlassian.com/questions/104822/jira-rest-api-attachment-incoherent-result 。

您可以查看我在Duplicatepost上提供的答案: https : //stackoverflow.com/a/18489214/424059