API управления Fluent Azure: удаление настроек приложения - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь удалить параметр приложения AzureWebJobsDashboard из приложения-функции, которое предоставляется с помощью интерфейса управления текущими данными

    var fnApp = await azure.AppServices.FunctionApps
         .Define("fnappname")
         .WithExistingAppServicePlan(fnAppPlan)
         .WithExistingResourceGroup(resourceGroup)
         .WithExistingStorageAccount(fnStorage)
         .WithRuntimeVersion("~2")
         .WithHttp20Enabled(true)
         .WithAppSetting("AzureWebJobsDashboard", null)
         .WithTags(tags)
         .CreateAsync();

Я попытался установить для параметра приложения значение nullа также в пустую строку, но, похоже, это не имеет значения, и я не вижу способа явно удалить параметр.

1 Ответ

0 голосов
/ 18 октября 2019

Заканчивается этим методом расширения в конце:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.Management.AppService.Fluent;

public static class Extensions
{
    private static HttpClient client = new HttpClient();

    public static async ValueTask<bool> SetAppSettingsAsync(this IWebAppBase webApp, string[] appSettingsToRemove, Dictionary<string, string> updates = null, CancellationToken cancellationToken = default)
    {
        var url = $"https://management.azure.com/subscriptions/{webApp.Manager.SubscriptionId}/resourceGroups/{webApp.ResourceGroupName}/providers/Microsoft.Web/sites/{webApp.Name}/config/appsettings?api-version=2016-08-01";

        var settings = await webApp.GetAppSettingsAsync();

        var newValues = settings.ToDictionary(s => s.Key, s => s.Value.Value);

        foreach (var appSettingToRemove in appSettingsToRemove)
        {
            if (newValues.TryGetValue(appSettingToRemove, out var _))
            {
                newValues.Remove(appSettingToRemove);
            }
        }

        if (updates != null)
        {
            foreach (var appSettingToupdate in updates.Keys)
            {
                newValues[appSettingToupdate] = updates[appSettingToupdate];
            }
        }

        var json = JsonSerializer.Serialize(new { properties = newValues });

        var request = new HttpRequestMessage(HttpMethod.Put, url)
        {
            Content = new StringContent(
                    json,
                    Encoding.UTF8,
                    "application/json"
                    ),
        };

        await webApp.Manager.RestClient.Credentials.ProcessHttpRequestAsync(request, cancellationToken);

        var result = await client.SendAsync(request, cancellationToken);

        if (!result.IsSuccessStatusCode)
        {
            Console.Out.WriteLine($"Failed to set app settings: {await result.Content.ReadAsStringAsync()}");
        }

        return false;
    }
}

Использование:

    await fnApp.SetAppSettingsAsync(appSettingsToRemove: new[] { "AzureWebJobsDashboard" });
...