通过Azure应用服务,我想获取应用的应用程序设置。https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/list-application-settings。
当我从站点使用“Try-it”并提供正确的参数时,调用工作。然而,在我的VS项目中,它不起作用。
下面我创建了一个简单的HTTPClient来实现这一点,但它不起作用。我错过了什么?
string clientId = "aaa";
string clientSecret = "bbb";
string tenantId = "ccc";
var subscriptionId = "ddd";
var resourceGroupName = "eee";
var name = "fff";
string apiUrl =
$"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/config/appsettings/list?api-version=2022-03-01";
try
{
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
.Build();
var scopes = new string[] { "https://management.azure.com/.default" };
var result = await app.AcquireTokenForClient(scopes)
.ExecuteAsync();
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent(String.Empty, Encoding.UTF8, "application/json");
HttpResponseMessage response = await httpClient.PostAsync(apiUrl, content);
if (response.IsSuccessStatusCode)
{
string responseContent = await response.Content.ReadAsStringAsync();
Console.WriteLine("API Response:");
Console.WriteLine(responseContent);
}
else
{
Console.WriteLine($"API call failed with status code: {response.StatusCode}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
我猜我和PostAsync方法有关系。
提前感谢!
我试着做一个GET请求(https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/get-function),它工作。
已解决,见Ikhtesam Afrin的评论。已将角色“网站贡献者”添加到Azure AD注册的应用程序中的函数应用程序。
1条答案
按热度按时间pw9qyyiw1#
我已经使用了你的代码,并得到了预期的结果,如下面的截图所示。
我只在我的功能应用程序中进行了以下更改。请将网站贡献者角色添加到您的Azure AD注册应用内的函数应用。
Output:
。