如何使用REST API对Confluence页面内容执行“ GET”请求

问题描述

我是C#的初学者,也是第一次使用REST API。
我想将Azure函数与HTTP触发器一起使用,以通过REST API“ GET”从Confluence页面获取内容
我在ConfluenceUser文件中指定了ConfluenceAPIConfluenceDomainlocal.settings.json

代码(Visual Studio 2019):

using Microsoft.Extensions.Configuration;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace HttpClientEx
{
    class Program
    {
        private static async Task Main(string[] args)
        {
            var confBuild = new ConfigurationBuilder()
                .AddJsonFile("local.settings.json")
                .AddEnvironmentvariables()
                .Build();

            //Basic Authentication
            var user = Encoding.UTF8.GetBytes(confBuild["ConfluenceUser"]);
            var api = Encoding.UTF8.GetBytes(confBuild["ConfluenceAPI"]);
            var domain = confBuild["ConfluenceDomain"];

            string basic_auth = Convert.ToBase64String(user) + ":" + Convert.ToBase64String(api);

            string pageid = "1234567";
            string page = "https://" + domain + "/wiki/rest/api/content/" + pageid;

        }
        private static async Task<string> getPageContent(string domain,int pageid,string basic_auth)
        {
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",basic_auth);

                var response = await client.GetAsync(String.Format("https://" + domain + "/wiki/rest/api/content/" + pageid.ToString() + "?expand=space,Metadata.labels"));
                var result = await response.Content.ReadAsstringAsync();

                return result;
            }
        }
    }
}

我的问题
我是否正确执行了GET请求?
如何查看从Confluence页面获得的内容

解决方法

如果要在Azure函数中调用rest API,请参考以下步骤

  1. 安装Azure Functions Core Tools

  2. 创建Azure函数

#create project
func init LocalFunctionProj --dotnet
cd LocalFunctionProj
#create httptrigger function
func new --name Http --template "HTTP trigger" --authlevel "anonymous"
  1. 更新项目

a。将以下设置添加到local.settings.json

{
    "IsEncrypted": false,"Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true","FUNCTIONS_WORKER_RUNTIME": "dotnet","ConfluenceUser":"","ConfluenceAPI":"","ConfluenceDomain":""
    }
}

b。更新Http.cs

中的代码
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;

namespace LocalFunctionProj
{
    
    public static class Http
    {
        private static HttpClient httpClient = new HttpClient();
        [FunctionName("Http")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous,"get","post",Route = null)] HttpRequest req,ILogger log,ExecutionContext context)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            var confBuild = new ConfigurationBuilder()
                .SetBasePath(context.FunctionAppDirectory)
                .AddJsonFile("local.settings.json")
                .AddEnvironmentVariables()
                .Build();

            //Basic Authentication
            var user =confBuild["ConfluenceUser"];
            var api = confBuild["ConfluenceAPI"];
            var domain = confBuild["ConfluenceDomain"];
              httpClient.DefaultRequestHeaders.Authorization= new AuthenticationHeaderValue("Basic",Convert.ToBase64String(
                    ASCIIEncoding.ASCII.GetBytes(
                        string.Format("{0}:{1}",user,api))));
            object  body = null;
            using (HttpResponseMessage response = await httpClient.GetAsync(
                        $"https://{domain}/wiki/rest/api/content/163979"))
            {
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();
               
                body = JsonConvert.DeserializeObject(responseBody);
            }
            return new OkObjectResult(body);
        }
    }
}

  1. 测试

使用以下命令运行项目

func start

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...