【问题标题】:Calling Azure DevOps REST API in a Azure Function [closed]在 Azure 函数中调用 Azure DevOps REST API [关闭]
【发布时间】:2021-04-14 16:56:17
【问题描述】:

我正在尝试为 Azure DevOps 团队创建一个 POST 请求,并希望通过 API 方法创建一个新团队。我已经阅读了这方面的文档,但我对此很陌生,不知道如何在我自己的项目中正确实施。

运行时出现错误。错误是由于返回值。由于我使用 REST API 的经验很少,因此如果有人能指导我走向正确的方向,我将不胜感激。

我正在使用带有 .NET Core 3.0 的 Visual Studio。

这是目前为止的代码:

using System.IO;
using System;
using Microsoft.Azure.WebJobs;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs.Extensions.Http;

namespace TeamsAdd
{
    public static class TeamsAdd
    {
        [FunctionName("TeamsAdd")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
            HttpRequestMessage req)
        {
            var PAT = "xxxx";
            var body = new
            {
                name = "sampleTeamName",
                id = "xxxx",
                projectId = "xxxx",                 
            };

            using (HttpClient client = new HttpClient())
            {

                client.DefaultRequestHeaders.Accept.Add(
                new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                    Convert.ToBase64String(
                        System.Text.ASCIIEncoding.ASCII.GetBytes(
                            string.Format("{0}:{1}", "", PAT))));

                //Connecting to the DevOps REST API
                var requestMessage = new HttpRequestMessage(HttpMethod.Post, $"https://dev.azure.com/{organization}/_apis/projects/{projectId}/teams?api-version=6.0");
                requestMessage.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");

                //Reading Server Response
                using (HttpResponseMessage response = client.SendAsync(requestMessage).Result)
                {
                    response.EnsureSuccessStatusCode();
                }
            }
        }       
    }
}

【问题讨论】:

  • 嗨@merum 请与我们分享错误。我也没有从这个字符串替换中看到 $"https://dev.azure.com/{organization}/_apis/projects/{projectId}/teams?api-version=6.0" organizationprojectId 变量。只是为了确定,你的原始代码中有它们吗?
  • 是的,我的原始代码中有这些变量..加上错误是 Run() 应该返回一些它不是的东西。
  • 错误是 CS0161 - 'TeamAdd.Run(HttpRequestMessage)': 并非所有代码路径都返回值。
  • 只是您缺少退货声明。请在`response.EnsureSuccessStatusCode();`后添加return response`
  • 您可能不应该在静态类/方法中调用 SendAsync() 方法。添加 .Result 将强制它运行,但它是否真正起作用有点不稳定。如果您使用 HttpClient 进行调用,通常使用 async/await 模式是最安全的,这样您的方法签名将是 public asyc Task<HttpResponseMessage> Run。也不清楚你传入的HttpRequestMessage 是干什么用的……?

标签: c# azure azure-devops azure-functions azure-devops-rest-api


【解决方案1】:

关于这个问题,可以参考以下代码

[FunctionName("Function2")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req)
        {
            var PAT = "";
            var body = new
            {
                name = "mytest7878or",

            };

            using (HttpClient client = new HttpClient())
            {

                client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                    Convert.ToBase64String(
                        ASCIIEncoding.ASCII.GetBytes(
                            string.Format("{0}:{1}", "", PAT))));

                //Connecting to the DevOps REST API
                var requestMessage = new HttpRequestMessage(HttpMethod.Post, $"https://dev.azure.com/{}/_apis/projects/{}/teams?api-version=6.0");
                requestMessage.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");

                //Reading Server Response
                using (HttpResponseMessage response = await client.SendAsync(requestMessage))
                {
                    if (!response.IsSuccessStatusCode)
                    {
                        
                        response.EnsureSuccessStatusCode();
                    }

                    return req.CreateResponse(HttpStatusCode.Created,"create successfully");
                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2020-06-12
    • 2021-03-10
    • 1970-01-01
    • 2022-07-17
    • 2021-04-19
    • 2020-11-29
    • 2022-01-23
    相关资源
    最近更新 更多