You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#调用Bitbucket API创建仓库失败求助

解决Bitbucket REST API创建仓库失败的问题

1. 修正API端点

Bitbucket 2.0 API创建仓库的正确端点是POST https://api.bitbucket.org/2.0/repositories/{workspace},无需在URL中指定{repo_slug}——该标识是仓库创建后自动生成的,创建时仅需通过请求体的name字段定义仓库名。

2. 认证方式的正确配置

App Token(Bearer认证)

  • 确认你的App Token拥有**repository:write权限**(创建仓库必须的权限,生成Token时需勾选对应权限项)
  • 代码中用Bearer头传递Token的逻辑正确,但要保证传入的password参数确实是生成的App Token,而非用户密码

Basic认证(用户名+App Token)

  • Bitbucket已不再支持用用户密码做Basic认证,必须使用用户名+App Token的组合
  • 正确的Basic头构造代码:
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"{ownername}:{appToken}")));
    

3. 补充请求体必填字段

Bitbucket API创建仓库时,scm是必填字段(默认值为git),你的原请求体缺少该字段,需补充:

var payload = new
{
    name = repositoryname,
    is_private = false,
    scm = "git" // 必填,指定版本控制系统类型
};

4. 增强错误排查能力

修改错误返回逻辑,获取API返回的详细错误信息,这能直接定位问题根源:

else
{
    var errorContent = response.Content.ReadAsStringAsync().Result;
    return $"\nE: 创建仓库{repositoryname}失败。{response.ReasonPhrase} 详细错误:{errorContent}";
}

修正后的完整代码示例

private string CreateNewBitbucketRepo(string workspace, string appToken, string repositoryname)
{
    try
    {
        // 使用正确的API端点
        var apiUrl = $"https://api.bitbucket.org/2.0/repositories/{workspace}";

        var payload = new
        {
            name = repositoryname,
            is_private = false,
            scm = "git" // 必填字段
        };

        var jsonPayload = JsonConvert.SerializeObject(payload);

        using (var client = new HttpClient())
        {
            // Bearer认证方式
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", appToken);
            var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");

            var response = client.PostAsync(apiUrl, content).Result;

            if (response.IsSuccessStatusCode)
            {
                return string.Empty;
            }
            else
            {
                var errorDetails = response.Content.ReadAsStringAsync().Result;
                return $"\nE: 创建仓库{repositoryname}失败。{response.ReasonPhrase} 详情:{errorDetails}";
            }
        }
    }
    catch (Exception e)
    {
        return $"\n创建仓库{repositoryname}时出错:{e.Message}";
    }
}

额外检查项

  • 确认workspace参数是你的Bitbucket工作区ID(而非显示名称,可在工作区设置页面查看)
  • 检查网络环境是否有代理或防火墙拦截API请求
  • 确保仓库名称符合Bitbucket命名规则(无特殊字符、长度合规)

内容的提问来源于stack exchange,提问作者Shivam Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:56:01