Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “怎么做?”;获得;请求将页面内容与REST API合并_C#_Azure Functions_Httprequest_Confluence_Confluence Rest Api - Fatal编程技术网

C# “怎么做?”;获得;请求将页面内容与REST API合并

C# “怎么做?”;获得;请求将页面内容与REST API合并,c#,azure-functions,httprequest,confluence,confluence-rest-api,C#,Azure Functions,Httprequest,Confluence,Confluence Rest Api,我是C#的初学者,也是第一次使用RESTAPI 我想使用一个带有HTTP触发器的Azure函数,通过RESTAPI“get”从合流页面获取内容 我已在local.settings.json文件中指定了ConfluenceUser、ConfluenceAPI和ConfluenceDomain。 代码(Visual Studio 2019): using Microsoft.Extensions.Configuration; using System; using System.Net.Http;

我是C#的初学者,也是第一次使用RESTAPI
我想使用一个带有HTTP触发器的Azure函数,通过RESTAPI“get”从合流页面获取内容
我已在
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;
            }
        }
    }
}
使用Microsoft.Extensions.Configuration;
使用制度;
使用System.Net.Http;
使用System.Net.Http.Header;
使用系统文本;
使用System.Threading.Tasks;
命名空间HttpClientEx
{
班级计划
{
专用静态异步任务主(字符串[]args)
{
var confBuild=new ConfigurationBuilder()
.AddJsonFile(“local.settings.json”)
.AddenEnvironmentVariables()
.Build();
//基本身份验证
var user=Encoding.UTF8.GetBytes(confBuild[“ConfluenceUser”]);
var api=Encoding.UTF8.GetBytes(confBuild[“ConfluenceAPI”]);
var domain=confBuild[“ConfluenceDomain”];
string basic_auth=Convert.ToBase64String(用户)+“:”+Convert.ToBase64String(api);
字符串pageid=“1234567”;
string page=“https://“+domain+”/wiki/rest/api/content/”+pageid;
}
私有静态异步任务getPageContent(字符串域、int pageid、字符串基本身份验证)
{
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Authorization=newauthenticationheadervalue(“Basic”,Basic\u 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();
返回结果;
}
}
}
}
我的问题:
我是否正确执行了GET请求

如何查看从Confluence页面获得的内容?

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

  • 安装

  • 创建Azure函数

  • 更新项目
  • 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);
            }
        }
    }
    
    

    我已删除您的
    [visual studio]
    标记,因为它是为有关visual studio的问题保留的。如果请求成功,我认为您当前的代码将返回结果。我将添加
    response.EnsureSuccessStatusCode()
    var response=
    var result=
    行之间,这样,如果您正在访问的服务器的状态代码显示调用不成功,则会引发异常。@Pio我假设Azure的函数框架调用了
    getPageContent
    。顺便说一句:它似乎是基本的参数是秘密的,但是允许用户直接指定“域”(实际上可能是他们自己的页面)将允许他们拦截授权头。我不确定这对你来说是否是一个安全问题,但我认为最好还是指出这一点。老实说,最好尝试在你的本地计算机上发出请求,以诊断它的问题。
    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);
            }
        }
    }
    
    
    func start