繁体   English   中英

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

[英]Post attachment to Jira using REST API in c#

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

 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论坛上的帖子: https//answers.atlassian.com/questions/104822/jira-rest-api-attachment-incoherent-result

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM