【问题标题】:Access FunctionAppDirectory in .NET 5 Azure Function在 .NET 5 Azure 函数中访问 FunctionAppDirectory
【发布时间】:2021-06-24 10:21:17
【问题描述】:

我需要在 Azure Function 中访问 FunctionAppDirectory

这里是函数的简化版

[Function("Test")]
public static HttpResponseData Test([HttpTrigger(AuthorizationLevel.Function, "post", Route = "Test")] HttpRequestData req, 
ExecutionContext context, FunctionContext fContext)
{
    var log = fContext.GetLogger(nameof(TestOperations));
    log.LogInformation(context?.FunctionAppDirectory?.ToString());
    return req.CreateResponse(HttpStatusCode.OK);
}

ExecutionContext 这里为空。

我的 Program.cs 文件

class Program
{
    static Task Main(string[] args)
    {
        var host = new HostBuilder()
            .ConfigureAppConfiguration(configurationBuilder =>
            {
                configurationBuilder.AddCommandLine(args);
            })
            .ConfigureFunctionsWorkerDefaults()
            .ConfigureServices(services =>
            {
                // Add Logging
                services.AddLogging();
            })
            .Build();

        return host.RunAsync();
    }
}

在 .NET 5 中运行的 Azure 函数

如何为 ExecutionContext 配置绑定或以其他方式获取 FunctionAppDirectory?

【问题讨论】:

标签: azure azure-functions .net-5


【解决方案1】:

正如Alex在评论中提到的,azure function .net 5现在不支持'context.FunctionAppDirectory'来获取函数应用的目录。

在函数应用 3.0 中,“ExecutionContext”设计在“Microsoft.Azure.WebJobs”包中。但在您的代码中,ExecutionContext 来自“System.Threading”。所以这些是不同的类。

您可以使用以下代码获取 .NET 5.0 azure function 中的 azure function 目录:

using System;
using System.Collections.Generic;
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace FunctionApp6
{
    public static class Function1
    {
        [Function("Function1")]
        public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
            FunctionContext executionContext)
        {
            var logger = executionContext.GetLogger("Function1");
            logger.LogInformation("C# HTTP trigger function processed a request.");

            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");

            var local_root = Environment.GetEnvironmentVariable("AzureWebJobsScriptRoot");
            var azure_root = $"{Environment.GetEnvironmentVariable("HOME")}/site/wwwroot";
            var actual_root = local_root ?? azure_root;

            response.WriteString(actual_root);

            return response;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2021-08-26
    • 2017-01-02
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多