【问题标题】:How do I edit issues in Gitlab via the a API?如何通过 API 在 Gitlab 中编辑问题?
【发布时间】:2021-11-12 11:14:37
【问题描述】:

我正在尝试通过 C# 应用程序中的 API 向 Gitlab 问题添加评论。

下面的代码如下:

  static async Task Test()
  {
        using (client)
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Add("Private-Token", "TheToken");
            StringContent content = new StringContent(@"{\""body\"": \""newnote\""}", Encoding.UTF8, "application/json");

            HttpResponseMessage result = await client.PutAsync("https://URL/api/v4/projects/1/issues/1/notes", content);
            string resultContentJson = await result.Content.ReadAsStringAsync();
        }
  }

但它会产生以下错误:

{StatusCode: 400, ReasonPhrase: 'Bad Request', 版本: 1.1, 内容: System.Net.Http.StreamContent,标头:\r\n{\r\n 连接: 保持活动状态\r\n X-Request-Id: XXX\r\n X 运行时:0.002577\r\n 日期:格林威治标准时间 2021 年 9 月 17 日星期五 15:07:23\r\n 服务器:nginx\r\n 内容长度:36\r\n 内容类型: 应用程序/json;字符集=utf-8\r\n}}

我认为我在设置内容时做错了,但我看不到是什么。 有人有什么想法吗?

编辑:

我变了:

 StringContent content = new StringContent(@"{\""body\"": \""newnote\""}", Encoding.UTF8, "application/json");

StringContent content = new StringContent(@"{""body"": ""newnote""}", Encoding.UTF8, "application/json");

哪个是有效的 json。它现在产生错误消息:

{StatusCode:404,ReasonPhrase:“未找到”,版本:1.1,内容: System.Net.Http.StreamContent,标头:\r\n{\r\n 连接: keep-alive\r\n 变化:来源\r\n X-Content-Type-Options: nosniff\r\n X-Frame-Options: SAMEORIGIN\r\n X-Gitlab-Feature-Category: not_owned\r\n X-Request-Id: XXX\r\n X-Runtime: 0.012825\r\n 缓存控制:无缓存\r\n 日期:格林威治标准时间 2021 年 9 月 17 日星期五 15:32:41\r\n 服务器:nginx\r\n 内容长度:25\r\n 内容类型: 应用程序/json\r\n}}

【问题讨论】:

  • 阅读响应正文:有 36 个字节,它可能会告诉您错误是什么
  • @canton7,没什么明显的 - 我错过了什么明显的东西吗?
  • 您的内容不是有效的 JSON。您有逐字字符串修饰符@ 引号双双引号的转义字符。试试Console.WriteLine(@"{\""body\"": \""newnote\""}");,看看它会告诉你什么。
  • GitLab docs 表示您使用 POST 创建新评论,并使用 PUT 修改现有评论。您正在使用用于创建新评论的 URL,但使用的是 PUT 请求。
  • @canton7,就是这样!!!谢谢!当我试图修复其他东西并忘记它时,我从 post 更改为 put 较早。谢谢!

标签: c# api gitlab rest


【解决方案1】:

原来问题出在使用

client.PutAsync

应该使用:

client.PostAsync

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多