【问题标题】:When deploy Azure function to Azure how did it know that it should read the AzureFunctionSettings from App settings instead of from local.setting.json将 Azure 功能部署到 Azure 时,它​​如何知道应该从 App 设置而不是从 local.setting.json 读取 AzureFunctionSettings
【发布时间】:2023-01-27 19:36:29
【问题描述】:

我使用这些要点创建了我的第一个与 SharePoint Online 列表集成的 Azure Function:-

1-我创建了一个带有自签名证书的 Azure 应用程序来授权我的 Azure 功能。

2-我使用 Visual Studio 2019 创建了一个新的 Azure Function 项目。这是主要组件 -Function.cs:-

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using PnP.Core.Services;
using PnP.Core.Model.SharePoint;
using System.Collections.Generic;

namespace FunctionApp1
{
    public  class Function1
        
    {
        private readonly IPnPContextFactory pnpContextFactory;
        public Function1(IPnPContextFactory pnpContextFactory)
        {
            this.pnpContextFactory = pnpContextFactory;
        
        }
        [FunctionName("Function1")]
        public  void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            using (var context = pnpContextFactory.Create("Default"))
            {
                var myList = context.Web.Lists.GetByTitle("SubFolders");
                Dictionary<string, object> values = new Dictionary<string, object>
    {
        { "Title", System.DateTime.Now }
    };

                // Use the AddBatch method to add the request to the current batch
                myList.Items.AddBatch(values);
                context.Execute();
            }
        }
    }
}

-Startup.cs:-

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using PnP.Core.Auth;
using System.Security.Cryptography.X509Certificates;

[assembly: FunctionsStartup(typeof(FunctionApp1.Startup))]
namespace FunctionApp1
{
    class Startup :FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {

            var config = builder.GetContext().Configuration;
            var azureFunctionSettings = new AzureFunctionSettings();
            config.Bind(azureFunctionSettings);
            builder.Services.AddPnPCore(options =>
            {
                options.DisableTelemetry = true;
                var authProvider = new X509CertificateAuthenticationProvider(azureFunctionSettings.ClientId,
                    azureFunctionSettings.TenantId,
                    StoreName.My,
                    StoreLocation.CurrentUser,
                    azureFunctionSettings.CertificateThumbprint);
                options.DefaultAuthenticationProvider = authProvider;

                options.Sites.Add("Default", new PnP.Core.Services.Builder.Configuration.PnPCoreSiteOptions

                {
                    SiteUrl = azureFunctionSettings.SiteUrl,
                    AuthenticationProvider = authProvider


                });

            });
        
        }

    }
}

-local.setting.json:-

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "SiteUrl": "https://***.sharepoint.com/",
    "TenantId": "0b***",
    "ClientId": "92***",
    "CertificateThumbPrint": "EB***",
    "WEBSITE_LOAD_CERTIFICATES": "EB***"
  }
}

然后我将它部署到 Azure,它运行良好,每 5 分钟添加一个新的列表项。

但我无法理解的是,当我在本地测试该功能时,该功能从 local.settings.json 文件中读取其设置,但在将其部署到 Azure 后,它开始从在线 Azure App 设置中读取其设置..那么如何这是在感官背后做的吗?

【问题讨论】:

    标签: azure .net-core azure-functions asp.net-core-3.1


    【解决方案1】:

    这是设计使然。

    函数应用中的应用设置包含影响该函数应用的所有函数的配置选项。当您在本地运行时,这些设置将作为本地环境变量进行访问。

    您可以使用应用程序设置覆盖 host.json 设置值,而无需更改 host.json 文件本身。这对于需要为特定环境配置或修改特定 host.json 设置的场景很有帮助。这还允许您更改 host.json 设置而无需重新发布您的项目。

    取自App settings reference for Azure Functions

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 2022-12-15
      • 2022-07-03
      • 2018-08-19
      • 1970-01-01
      • 2022-07-21
      相关资源
      最近更新 更多