Использование API REST Azure в приложении C # не показывает ответа - PullRequest
0 голосов
/ 11 июня 2019

Когда я пытаюсь использовать Azure Rest Apl URL на почтовом человеке Azure Docs, я могу получить JSON, который имеет все группы ресурсов.https://docs.microsoft.com/en-us/rest/api/resources/resourcegroups/list#code-try-0 ссылка

enter image description here

Но я пытаюсь это сделатьиз приложения ASP.NET MVC Core C # я получаю пустой массив.

    public async Task<ResourceGroupModel> GetResourceGroupStatus()
    {
        ResourceGroupModel resourceGroupModel = null;
        try         
        { 
            string requestUrlString = iconfiguration.GetValue<string>("HealthSettings:AzureGetResourcesBySubscriptionURL");
            string azureSubscription = iconfiguration.GetValue<string>("HealthSettings:AzureSubscription");
            string clientId = iconfiguration.GetValue<string>("HealthSettings:ClientId");
            string tenantId = iconfiguration.GetValue<string>("HealthSettings:TenantId");
            string clientSecret = iconfiguration.GetValue<string>("HealthSettings:ClientSecret");
            Uri requestUrl = new Uri(requestUrlString.Replace("{subscriptionId}", azureSubscription));

            string token = await GetAccessToken(tenantId, clientId, clientSecret);

            _httpClient.DefaultRequestHeaders.Remove("Authorization");
            _httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

            var response = _httpClient.GetAsync(requestUrl);

            if (response.Result.IsSuccessStatusCode)
            {
                var data = response.Result.Content.ReadAsStringAsync();
                resourceGroupModel = ResourceGroupModel.FromJson(data.Result.ToString());
            }
        }
        catch (Exception ex)
        {
        }
        return resourceGroupModel;
    }

Не могли бы вы помочь мне избавиться от странного поведения API-интерфейса REST Azure. Большое спасибо заранее.:)

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

Как сказал Ciubotariu, у вашего участника службы нет доступа к группе ресурсов.Однако, если вы только добавите своего участника службы в группу ресурсов, вы сможете получить только указанную группу ресурсов.Итак, добавьте субъект вашей службы в подписку .Вот шаги:

1. Перейдите в свою подписку, нажмите Контроль доступа> Добавить (Добавить назначение роли) enter image description here

2.Добавьте участника своей службы иназначить ему роль, например Contributor.enter image description here

3. После этого вы получите все группы ресурсов для подписки.enter image description here

Обновление:

4. Вот полный код, который я использовал:

var appId = "xxxxxxxxxxxxxxx";
var secretKey = "xxxxxxxxxxxxxxxxxxxxx";
var tenantId = "xxxxxxxxxxxxxxxxx";
var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
ClientCredential clientCredential = new ClientCredential(appId, secretKey);
var tokenResponse = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result;
var accessToken = tokenResponse.AccessToken;
using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    var baseUrl = new Uri($"https://management.azure.com/");
    var requestURl = baseUrl +
                    @"subscriptions/xxxxxxxxxxxxxxxx/resourcegroups?api-version=2019-05-01";
    var response = client.GetAsync(requestURl).Result.Content.ReadAsStringAsync().Result;
}
0 голосов
/ 15 июня 2019

Удаление существующего clientsecret и создание нового для принципа обслуживания решило проблему.

0 голосов
/ 11 июня 2019

У вашего участника службы нет доступа к группе ресурсов.

  1. Войдите на портал Azure и выберите группу ресурсов
  2. Выберите Контроль доступа (IAM) с блейда
  3. На вкладке «Проверить доступ», добавить назначение роли
  4. Предоставьте роль своему руководителю службы (Владелец / Автор / Читатель)
  5. Назначить доступ: пользователю, группе или субъекту службы Azure AD
  6. Введите имя участника службы, выполните поиск и выберите его, затем Сохранить.
  7. Подождите пару минут и повторите попытку вызова вашего API.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...