You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure C# SDK获取网站配置设置失败的技术求助

问题

我尝试从Azure网站获取设置和连接字符串,用于内部控制台工具,但过程比预期困难。目前使用以下C#代码:

var armClient = new ArmClient(new DefaultAzureCredential(), "[My subscription ID]");
var webApp = armClient.GetWebSiteResource(new Azure.Core.ResourceIdentifier("[my resource identifier]"));
var b = webApp.GetAllConfigurationData();
var c = b.First();
Console.WriteLine(c.Name);
Console.WriteLine(c.ConnectionStrings == null ? "null" : c.ConnectionStrings.Count);
Console.WriteLine(c.AppSettings == null ? "null" : c.AppSettings.Count);

执行后能正确输出网站名称,但ConnectionStrings和AppSettings均返回null,而Azure门户中确实存在这些配置。GetAllConfigurationData的文档提示可能需要多次调用和迭代,但我不清楚具体操作方式。我需要实现与PowerShell命令az webapp config appsettings list --name foo --resource-group bar等效的功能,且必须使用控制台应用,请问该如何解决?

解决方案

问题出在GetAllConfigurationData()返回的是异步分页结果,直接调用First()只会拿到未完全加载的初始对象,无法获取完整的配置数据。以下是两种可行的解决方法:

方法1:使用专用方法直接获取(推荐)

Azure.ResourceManager.Sites库提供了更直接的API来单独获取应用设置和连接字符串,无需处理分页逻辑:

using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Sites;

var armClient = new ArmClient(new DefaultAzureCredential(), "[你的订阅ID]");
var webApp = armClient.GetWebSiteResource(new ResourceIdentifier("[你的资源ID]"));

// 获取应用设置
var appSettingsResult = await webApp.GetSiteAppSettingsAsync();
var appSettings = appSettingsResult.Value.Properties;
foreach (var setting in appSettings)
{
    Console.WriteLine($"应用设置: {setting.Key} = {setting.Value}");
}

// 获取连接字符串
var connectionStringsResult = await webApp.GetSiteConnectionStringsAsync();
var connectionStrings = connectionStringsResult.Value.Properties;
foreach (var connStr in connectionStrings)
{
    Console.WriteLine($"连接字符串: {connStr.Key} - 类型: {connStr.Value.Type}");
    Console.WriteLine($"值: {connStr.Value.Value}");
}

方法2:正确遍历分页结果

如果一定要使用GetAllConfigurationData(),需要异步遍历所有分页项以确保加载完整数据:

using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Sites;

var armClient = new ArmClient(new DefaultAzureCredential(), "[你的订阅ID]");
var webApp = armClient.GetWebSiteResource(new ResourceIdentifier("[你的资源ID]"));

await foreach (var configData in webApp.GetAllConfigurationDataAsync())
{
    if (configData.AppSettings != null)
    {
        foreach (var setting in configData.AppSettings)
        {
            Console.WriteLine($"应用设置: {setting.Key} = {setting.Value}");
        }
    }
    if (configData.ConnectionStrings != null)
    {
        foreach (var connStr in configData.ConnectionStrings)
        {
            Console.WriteLine($"连接字符串: {connStr.Key} - 类型: {connStr.Value.Type}");
            Console.WriteLine($"值: {connStr.Value.Value}");
        }
    }
}

注意事项

  • 确保项目引用了最新版的Azure.ResourceManager.Sites NuGet包
  • 运行代码的身份(本地开发时为你的Azure账号)需要拥有网站配置读取权限,比如Website Contributor或Reader角色

内容的提问来源于stack exchange,提问作者Ari Roth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:15:59