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

通过代码批准Pull Request时持续触发Method NotAllowed异常求助

解决Azure DevOps API自动批准PR时的"Method Not Allowed"异常

问题分析

出现Method Not Allowed异常的核心原因是API调用不符合Azure DevOps的要求,结合你的代码,主要可能存在以下几点问题:

  • UpdatePullRequestReviewerAsync参数顺序错误:你将reviewer对象放在了参数首位,而多数版本的Azure DevOps SDK中,该方法的参数顺序应为仓库ID、PR ID、评审人ID、评审人对象,参数顺序错误会导致API路由匹配失败,触发405错误。
  • 评审人标识缺失:仅设置Vote = 10不足以让API定位到要更新的评审人,必须提供评审人的唯一Id。
  • 未正确处理异步方法:使用.Result同步阻塞异步调用,可能引发线程问题,同时也不利于错误排查。

修复方案及代码示例

1. 修正API参数顺序与评审人对象

确保UpdatePullRequestReviewerAsync的参数顺序正确,且评审人对象包含唯一Id:

// 构建PR对象(仅保留必要字段,减少冗余)
var pr = new GitPullRequest
{
    Title = $"PR AUTO from {SrcBranch} into {TrgtBranch}",
    Description = $"PR AUTO from {SrcBranch} into {TrgtBranch}",
    SourceRefName = SrcBranch.Name,
    TargetRefName = TrgtBranch.Name,
    Repository = rep,
    AutoCompleteSetBy = new IdentityRef(),
    Reviewers = new IdentityRefWithVote[]
    {
        new IdentityRefWithVote
        {
            Id = idReviewer,
            DisplayName = nameReviewer,
            UniqueName = uniqueName
        }
    }
};

// 使用await异步调用,避免.Result的阻塞问题
var createPr = await gitClient.CreatePullRequestAsync(pr, Project, RepositoryId);

// 构建要更新的评审人对象,必须包含Id和Vote
var reviewerToUpdate = new IdentityRefWithVote
{
    Id = idReviewer,
    Vote = 10 // 10代表批准,-10代表拒绝,0代表无意见
};

// 按正确参数顺序调用更新方法
await gitClient.UpdatePullRequestReviewerAsync(repository.Id, createPr.PullRequestId, idReviewer, reviewerToUpdate);

2. 权限检查

执行代码的账号需要具备以下权限:

  • 目标仓库的Contributor或更高权限
  • 对Pull Request的评审与批准权限

3. 异步方法最佳实践

全程使用await处理异步方法,避免使用.Result或.Wait(),防止线程死锁和异常捕获不完整的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:55:20