无法以编程方式添加/更新Azure函数键

2ekbmq32  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(123)

尝试以编程方式添加/更新功能键时,收到以下错误:
状态代码:401,原因描述:'未授权'

    • 代码:**

执行以下代码会导致上述错误。

static void FunctionKey(string resourceGroupName, string functionAppName, string functionName, NameValuePair kv)
{
    var resource = $"subscriptions/{SubscriptionId.Value}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{functionAppName}/functions/{functionName}/keys/{kv.Name}?api-version=2022-03-01";
    var httpClient = new HttpClient() { BaseAddress = new Uri("https://management.azure.com/") };
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AuthToken.Value);
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var json = @"{
                  ""Properties"": {
                    ""Name"": ""ApiKey"",
                    ""Value"": ""some_value""
                  }
                }";

    using (var content = new StringContent(json, Encoding.UTF8, "application/json"))
    {
        var response = httpClient.PostAsync(resource, content).Result;

        if (!response.IsSuccessStatusCode)
            throw new Exception($"Error: Failed to register function key for {functionName}");
    }
}
    • 研究:**

我在文档模拟器中成功地执行了此任务。

z31licg0

z31licg01#

我尝试通过Postman在我的环境中重现相同的问题,结果如下:

当我运行下面的查询而不包括承载令牌时,我得到了相同的错误401 Unauthorized如下:

PUT https://management.azure.com/subscriptions/<subID>/resourceGroups/<rgname>/providers/Microsoft.Web/sites/<funcappname>/functions/<funcname>/keys/<keyname>?api-version=2022-03-01
{
    "Properties": 
        {
            "Name": "keyname",
            "Value": "xxxxxxxxxxxx"
        }
}
    • 答复:**

传递令牌后,我可以成功创建功能键,如下所示:

当我检查同一门户网站时,**srikey**出现在功能键下,如下所示:

在您的示例中,您使用的是httpClient.PostAsync,这意味着POST方法。
当我使用POST方法进行以下查询时,我也得到了**404 Not found**错误,如下所示:

POST https://management.azure.com/subscriptions/<subID>/resourceGroups/<rgname>/providers/Microsoft.Web/sites/<funcappname>/functions/<funcname>/keys/<keyname>?api-version=2022-03-01
{
    "Properties": 
        {
            "Name": "keyname",
            "Value": "xxxxxxxxxxxx"
        }
}
    • 答复:**

解决错误,请确保通过将httpClient.PostAsync方法更改为httpClient.PutAsync方法来使用PUT方法。

相关问题