【发布时间】: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 较早。谢谢!