Я понимаю, что это может быть легко, или C# экспертов, но я как бы изо всех сил пытаюсь получить значения из Http-ответа, используя Azure Rest API.
То, что я пытаюсь do : у меня есть требование получить Azure TrafficManager ProfileName , EndpointName и TargetName из Azure Rest API с использованием C#. Мне удалось добраться до ProfileName , но не удалось получить Endpoint Name и Target Name из ответа.
Каждая подписка имеет более одного профиля менеджера Traffi c, и каждый профиль имеет несколько конечных точек. Итак, я зациклил начальный ответ ProfileName (1-й вызов API-интерфейса отдыха) в FOR L oop, который работает нормально и пытается добраться до конечных точек и целей (2-й вызов API-интерфейса отдыха) в приведенном ниже коде.
Пожалуйста, помогите мне получить конечные точки и цели из второго вызова API отдыха.
Я вставил HTTP-ответ, который я получаю из второго вызова API отдыха.
Второй ответ Http с именем конечной точки и именем цели
{
"id":"\/subscriptions\/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\/resourceGroups\/MyResourceGroupName\/providers\/Microsoft.Network\/trafficManagerProfiles\/MyTrafficManagerProfileName",
"name":"MyTrafficManagerProfileName",
"type":"Microsoft.Network\/trafficManagerProfiles",
"location":"global",
"tags":{},
"properties":
{
"profileStatus":"Enabled",
"trafficRoutingMethod":"Weighted",
"dnsConfig":
{
"relativeName":"MyTrafficManagerProfileName",
"fqdn":"yTafficManagerProfileName.trafficmanager.net",
"ttl":60
},
"monitorConfig":
{
"profileMonitorStatus":"Online",
"protocol":"HTTPS",
"port":443,
"path":"\/vip",
"intervalInSeconds":30,
"toleratedNumberOfFailures":3,
"timeoutInSeconds":10
},
"endpoints":
[
{
"id":"\/subscriptions\/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\/resourceGroups\/MyResourceGroupName\/providers\/Microsoft.Network\/trafficManagerProfiles\/MyTrafficManagerProfileName\/azureEndpoints\/MyEndPointName1",
"name":"MyEndPointName1",
"type":"Microsoft.Network\/trafficManagerProfiles\/azureEndpoints",
"properties":
{
"endpointStatus":"Enabled",
"endpointMonitorStatus":"Online",
"targetResourceId":"\/subscriptions\/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\/resourceGroups\/MyResourceGroupName\/providers\/Microsoft.Web\/sites\/MyTrafficManagerProfileName",
"target":"MyTargetName1",
"weight":1000,
"priority":1,
"endpointLocation":"North Central US"
}
},
{
"id":"\/subscriptions\/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\/resourceGroups\/MyResourceGroupName\/providers\/Microsoft.Network\/trafficManagerProfiles\/MyTrafficManagerProfileName\/externalEndpoints\/MyEndPointName2",
"name":"MyEndPointName2",
"type":"Microsoft.Network\/trafficManagerProfiles\/externalEndpoints",
"properties":
{
"endpointStatus":"Disabled",
"endpointMonitorStatus":"Disabled",
"target":"MyTargetName2",
"weight":1,
"priority":2,
"endpointLocation":null
}
}
]
,"trafficViewEnrollmentStatus":"Disabled"
}
}
C# Метод получения значений из Azure Rest API
private static async Task GetTMPDetailsAsync(string token, string TeamGroupsName, string ServiceName, string SubscriptionName, string SubscriptionGUID, string SQLServerName, string SQLServerAdmin, string SQLServerAdminPasword, string DatabaseName)
{
string ResourceType = "Microsoft.Network/trafficmanagerprofiles";
var httpClient = new HttpClient
{
BaseAddress = new Uri("https://management.azure.com/subscriptions/")
};
// Get Network Profile Name and ResourceGroupName
string URI = $"/subscriptions/{SubscriptionGUID}/resources?$filter=resourceType%20EQ%20'{ResourceType}'&api-version=2019-05-10";
httpClient.DefaultRequestHeaders.Remove("Authorization");
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
HttpResponseMessage response = await httpClient.GetAsync(URI).ConfigureAwait(false);
var HttpsResponse = await response.Content.ReadAsStringAsync();
dynamic ResourcesList = JsonConvert.DeserializeObject<object>(HttpsResponse);
if (ResourcesList.value != null && !ResourcesList.value.Contains("SubscriptionNotFound"))
{
foreach (dynamic ResourceName in ResourcesList["value"])
{
string ResourceID = ResourceName.id;
string ProfileName = ResourceName.name;
string Region = ResourceName.location;
string ResourceGroupName = ResourceID.Remove(0, 67);
int CharsToRemove = 52 + ProfileName.Length;
ResourceGroupName = ResourceGroupName.Remove(ResourceGroupName.Length - CharsToRemove);
var TMPhttpClient = new HttpClient
{
BaseAddress = new Uri("https://management.azure.com/subscriptions/")
};
// Get EndPoints and Targets
string TMPURI = $"/subscriptions/{SubscriptionGUID}/resourceGroups/{ResourceGroupName}/providers/{ResourceType}/{ProfileName}?api-version=2018-04-01";
httpClient.DefaultRequestHeaders.Remove("Authorization");
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
HttpResponseMessage EndPointResponse = await httpClient.GetAsync(TMPURI).ConfigureAwait(false);
var EndPointsResponse = await EndPointResponse.Content.ReadAsStringAsync();
dynamic ProfileList = JsonConvert.DeserializeObject<object>(EndPointsResponse);
foreach (dynamic ProfileDetailed in ProfileList)
{
string EndPointName = ProfileDetailed.properties.endpoints.name;
string Target = ProfileDetailed.properties.endpoints.properties.target;
DateTime RawDate = DateTime.Now;
string RefreshedAt = RawDate.ToString("yyyy-MM-dd HH:mm:ss.fff");
Console.WriteLine($"'{TeamGroupsName}', '{ServiceName}', '{SubscriptionName}', '{SubscriptionGUID}', '','', '{ProfileName}', '{Region}',' {EndPointName}', {Target}, '{RefreshedAt}'");
//string SQLStatement = ($"INSERT INTO AzureCapacityUsage..TMPDetailed_New" +
// $" Select '{TeamGroupsName}', '{ServiceName}', '{SubscriptionName}', '{SubscriptionGUID}', '','', '{ProfileName}', '{Region}',' {EndPointName}', {Target}, '{RefreshedAt}'");
//SQLConnectionHelper.ExecuteTSQL(SQLServerName, SQLServerAdmin, SQLServerAdminPasword, DatabaseName, SQLStatement);
}
}
}
}