【发布时间】:2020-11-12 08:36:26
【问题描述】:
我是 C# 的初学者,也是第一次使用 REST API。
我想使用带有 HTTP 触发器的 Azure 函数通过 REST API“GET”从 Confluence 页面获取内容。
我在local.settings.json 文件中指定了ConfluenceUser、ConfluenceAPI 和ConfluenceDomain。
代码(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 页面获取的内容?
【问题讨论】:
-
我删除了您的
[visual-studio]标签,因为它是为有关 Visual Studio 的问题保留的。 -
我认为如果请求成功,您当前的代码将返回结果。我会在
var response =和var result =行之间添加response.EnsureSuccessStatusCode(),这样如果您正在访问的服务器的状态代码显示调用不成功,就会引发异常。 -
@Pio 我假设
getPageContent是由 Azure 的 Functions 框架调用的。 -
顺便说一句:basic_auth 参数似乎是秘密的,但允许用户直接指定“域”(实际上可能是他们自己的页面)将允许他们拦截授权标头。我不确定这对您来说是否存在安全问题,但我认为最好还是指出来。
-
老实说,最好尝试在本地计算机上发出请求以诊断问题所在。
标签: c# azure-functions httprequest confluence confluence-rest-api