【问题标题】:The app settings value can not be updated using the kudu API call in azure function App无法使用 azure function App 中的 kudu API 调用更新应用设置值
【发布时间】:2021-03-31 07:24:54
【问题描述】:

我使用了 Visual Studio 2019。我使用了 2 个 API 调用 我参考了下面的文件:

使用 Kudu API 更改 function.json https://github.com/projectkudu/kudu/wiki/REST-API

1.PUT https://{functionAppName}.scm.azurewebsites.net/api/vfs/{pathToFunction.json},标题:If-Match:“*”,正文:新的 function.json 内容 然后发送请求以应用更改

2.POST https://{functionAppName}.scm.azurewebsites.net/api/functions/synctriggers 两个api都是返回成功状态码

状态码:

API1 给出 204 或 201 表示文档已成功更新

API2 给出 201 表示文档成功完成同步触发以保存文件修改

功能完成后刷新页面文件没有变化

代码如下:

using (var client = new HttpClient())
        {
            var creds = "credentials";
            var credentials = Encoding.ASCII.GetBytes(creds);

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.TryAddWithoutValidation("If-Match", "*");
            var data = new List<ChangeData>
                 {
                     new ChangeData{schedule="125255"}
                 };
            string json = "{'schedule':'*/48 * * * * *'}";
            var customerJson = JsonConvert.SerializeObject(data);
            var content = new StringContent(customerJson, Encoding.UTF8, "application/json");
            var response = client.PutAsync("https://********.scm.azurewebsites.net/api/vfs/home/site/wwwroot/Function7/function.json", content);
            Console.WriteLine(response.Result);
            /// var errorMessage = response..ToString();

            using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://******.scm.azurewebsites.net/api/functions/synctriggers"))
            {
                var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("basestring"));
                request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");

                var response3 = await client.SendAsync(request);
                Console.WriteLine(response3);
            }

我想更改 function.json 中的 schedule 值

【问题讨论】:

  • 能否详细描述您的问题?你想更新什么?
  • 好的,我编辑问题
  • 能否请您检查一下您的功能是否是读取模型?
  • 在 Azure 门户中,它显示“您的应用程序当前处于只读模式,因为您正在从包文件运行。要进行任何更改,请更新 zip 文件和 WEBSITE_RUN_FROM_PACKAGE 中的内容应用程序设置。”但我不知道如何解决这个问题
  • 在该模式下,我们无法更新函数中的任何文件。如果你想更新你的函数,我们需要重新部署它。

标签: c# asp.net-core azure-functions azureportal kudu


【解决方案1】:

最新

之前版本的azure function可以通过run-from-package配置修改文件。现在通过vs2019直接发布的函数app不支持这个操作了。

为了实现您的需求,我们可以使用命令行来发布。具体步骤在你的其他帖子中,需要帮助更多的论坛用户。

func azure functionapp publish function_app_name --csharp --nozip --force

How to change content dynamically after function is called in Azure function app


您想更改 function.json 中的计划值。

  1. 正如我在你的另一个帖子中回复的那样,这没有意义,但我也有办法(SCM_DO_BUILD_DURING_DEPLOYMENT)让你做出改变。

  2. 主要原因是修改json文件不会重新编译我们的FunctionApp1.dll文件,如下图。

How to change content dynamically after function is called in Azure function app

为什么会有这样的需求?

我猜你在Azure Portal上创建了一个Function App,所以你认为可以通过修改function.json来修改配置,但事实并非如此。

由于在门户上创建的函数应用会生成一个.csx 文件,所以它最终不会运行.dll,这是本质的区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 2020-02-15
    • 2022-10-04
    • 2023-03-08
    • 2023-02-24
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多