Gitlab API版本4使用命名空间/项目名称而非项目ID进行搜索时,会返回404错误。

6
我尝试使用VS Code的Gitlab工作流插件,但是它无法找到我的项目。我进行了调试,并发现它调用了
https://mydomain/gitlab/api/v4/projects/mygroup%2Fmyproject
而API返回的结果是:
{
error: "404 Project Not Found"
}

根据文档,这应该可以正常工作。
如果我调用https://mydomain/gitlab/api/v4/projects/:id,其中id是项目编号,我会得到:
path_with_namespace: "mygroup/myproject",

浏览互联网时,我发现有些人声称它对他们也没有用,但没有解决方案。其他人说它对他们完美地起作用。
我已经尝试过Gitlab CE 12.x.x,并现在升级到最新版本13(13.0.6),使用https://github.com/sameersbn/docker-gitlab
我已经尝试了几个项目,但都无济于事。
我是这些项目的维护者。
访问令牌具有api和read_user权限,如插件所请求的那样
显然我缺少了什么。但是什么呢?
编辑:
我的设置是将docker容器放在反向代理apache后面。也许授权不像预期的那样工作。该插件发送一个标题 PRIVATE-TOKEN 。我会检查标题是否传递给api。
不。 Docker容器接收到PRIVATE-TOKEN标头。
编辑2:
我建立了一个公共组和一个公共项目来消除授权问题。仍然不起作用。搜索返回404。
编辑3:

由于Dashrath Mundkar提出了关于curl命令的问题:

curl -H "PRIVATE-TOKEN:XXXXXXX" https://mydomain/gitlab/api/v4/projects/mygroup%2Fmyproject

你可以分享一下完整的curl命令来调用API吗?(当然,隐藏你的URL和token,只需在那里放上XXXX并粘贴到这里即可) - Dashrath Mundkar
3个回答

7

好的。我找到了答案,这与我的设置有些特殊相关。

由于对于那些在Gitlab前使用Apache 2.4作为反向代理的其他人来说可能也很重要,因此我回答自己的问题。

我的Apache配置包含 AllowEncodedSlashes NoDecode,以便Gitlab的请求可以包含所需的Api urlencoded路径,例如mygroup%2Fmyproject(否则Apache将返回404错误,请参阅AllowEncodedSlashes

不幸的是,这还不够。通常情况下,mod_proxy也会规范化ProxyPassed URL

因此,我的后端收到了mygroup%252Fmyproject(请注意添加的25,编码了%2F中的%字符),这导致Gitlab返回404错误。

在我将Apache配置更改为ProxyPass /gitlab http://gitlab.local:80/gitlab nocanon(我添加了nocanon)后,一切都正常工作了。


2
我也遇到了这个问题,但是在打开GitLab中的WebIDE时,WebIDE本身加载得很好,但是无法找到项目。 我不得不同时添加AllowEncodedSlashes NoDecodenocanon附录。 - da-chiller

0

这对我有用

 <VirtualHost *:80>
    ServerName gitlab.example.lk

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyVia Full

    <Proxy *>
        Require all granted
    </Proxy>

    AllowEncodedSlashes NoDecode
    ProxyPass / http://localhost:8181/ nocanon
    ProxyPassReverse / http://localhost:8181/
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.gitlab.example.lk [OR]
    RewriteCond %{SERVER_NAME} =gitlab.example.lk
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>


0
在我的情况下,AllowEncodedSlashes NoDecodenocanon是不够的,我还必须在RewriteRule中添加NE标志,这样它看起来像这样。
RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接