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

Blazor WebAssembly C#调用DevOps REST API创建项目遇执行异常

问题

在Blazor WebAssembly的C#代码中调用REST API在DevOps创建新项目时,函数最后一行Microsoft.VisualStudio.Services.Operations.Operation operation = await operationsHttpClient.GetOperation(resultId);始终无法执行,且无任何错误抛出。已确认PAT和URI正确,相关代码如下:

public async Task PushProjectToDevOps(string pat, ProjectDTO project)
{
    TeamProject teamProject = new();
    teamProject.Name = project.Name;
    teamProject.Description = project.Description;
    VssBasicCredential credentials = new VssBasicCredential("", pat);
    var connection = new VssConnection(uri, credentials);

    OperationsHttpClient operationsHttpClient = connection.GetClient<OperationsHttpClient>();

    using (ProjectHttpClient projectHttpClient = new ProjectHttpClient(uri, credentials))
    {
        var resultId = projectHttpClient.QueueCreateProject(teamProject).Result.Id;

        Microsoft.VisualStudio.Services.Operations.Operation operation = await operationsHttpClient.GetOperation(resultId);
    }
}
解决思路
  • 禁止同步异步混用:代码中用.Result同步调用QueueCreateProject,在Blazor WebAssembly单线程环境下会造成死锁,导致后续代码无法执行。改成异步调用:
    var createResult = await projectHttpClient.QueueCreateProject(teamProject);
    var resultId = createResult.Id;
    
  • 统一客户端实例化方式:ProjectHttpClient单独实例化,和OperationsHttpClient的连接上下文不一致,建议通过VssConnection统一获取客户端:
    var projectHttpClient = connection.GetClient<ProjectHttpClient>();
    // 去掉using,VssConnection会管理客户端生命周期
    
  • 添加异常捕获与日志:隐藏的异常可能导致代码中断,添加捕获逻辑排查问题:
    try
    {
        var createResult = await projectHttpClient.QueueCreateProject(teamProject);
        var resultId = createResult.Id;
        var operation = await operationsHttpClient.GetOperation(resultId);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"异常信息:{ex.Message}");
        if (ex is AggregateException aggEx)
        {
            foreach (var innerEx in aggEx.InnerExceptions)
            {
                Console.WriteLine($"内部异常:{innerEx.Message}");
            }
        }
        throw;
    }
    
  • 校验操作ID有效性:在获取resultId后打印日志,确认ID不为空或无效值,排除ID本身的问题。
  • 检查跨域配置:Blazor WASM运行在浏览器中,需确认DevOps API已允许应用域名的跨域请求,查看浏览器控制台网络标签页是否有跨域错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:31:09