public async Task <string> GetPropertiesAsync(string ApiManagementName, string ResourceGroupName, string singleApiName = null) { (string azToken, string azSubId) = await auth.GetAccessToken(); if (singleApiName == null) { string requestUrl = string.Format("{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/properties?api-version={4}", baseUrl, azSubId, ResourceGroupName, ApiManagementName, GlobalConstants.APIVersion); return(await CallApiManagementAsync(azToken, requestUrl)); } else { JArray policies = new JArray(); // Get API Extractor for reading policies FileWriter fw = new FileWriter(); var apiExtractor = new APIExtractor(fw); // Add API policy policies.Add(await apiExtractor.GetAPIPolicyAsync(ApiManagementName, ResourceGroupName, singleApiName)); // Get all operations of a specific API var operations = await apiExtractor.GetAllOperationNames(ApiManagementName, ResourceGroupName, singleApiName); // Add Operation policies foreach (var operation in operations) { policies.Add(await apiExtractor.GetOperationPolicyAsync(ApiManagementName, ResourceGroupName, singleApiName, operation)); } // Extract DisplayNames JArray nvDisplayNames = new JArray(); var propertyRegex = new Regex("{{(.*?)}}"); foreach (var policy in policies) { var matches = propertyRegex.Matches(policy?.ToString()); foreach (Match match in matches) { nvDisplayNames.Add(match.Groups[1].Value); } } // Get named value ids from displayNames var namedValues = new JObject(); namedValues["value"] = new JArray(); foreach (var displayName in nvDisplayNames) { var nv = await GetPropertyByDisplayName(ApiManagementName, ResourceGroupName, displayName?.ToString()); var nvO = JObject.Parse(nv); ((JArray)namedValues["value"]).Add(nvO["value"][0]); } namedValues["count"] = ((JArray)namedValues["value"]).Count; return(namedValues.ToString()); } }
public async Task <string> GetBackendsAsync(string ApiManagementName, string ResourceGroupName, string singleApiName) { (string azToken, string azSubId) = await auth.GetAccessToken(); if (string.IsNullOrEmpty(singleApiName)) { string requestUrl = string.Format("{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/backends?api-version={4}", baseUrl, azSubId, ResourceGroupName, ApiManagementName, GlobalConstants.APIVersion); return(await CallApiManagementAsync(azToken, requestUrl)); } else { JArray policies = new JArray(); // Get API Extractor for reading policies FileWriter fw = new FileWriter(); var apiExtractor = new APIExtractor(fw); // Add API policy policies.Add(await apiExtractor.GetAPIPolicyAsync(ApiManagementName, ResourceGroupName, singleApiName)); // Get all operations of a specific API var operations = await apiExtractor.GetAllOperationNames(ApiManagementName, ResourceGroupName, singleApiName); // Add Operation policies foreach (var operation in operations) { policies.Add(await apiExtractor.GetOperationPolicyAsync(ApiManagementName, ResourceGroupName, singleApiName, operation)); } // Extract DisplayNames JArray backendIds = new JArray(); var propertyRegex = new Regex("backend-id=\"({{(.*?)}}|.*?)\""); foreach (var policy in policies) { var policyO = JObject.Parse(policy?.ToString()); var policyString = policyO["properties"]["value"]?.ToString(); var matches = propertyRegex.Matches(policyString); foreach (Match match in matches) { string value = match.Groups[1].Value; // Handle Named Value if (value.StartsWith("{{")) { var nvExtractor = new PropertyExtractor(); // Get NamedValue without braces value = match.Groups[2].Value; var property = await nvExtractor.GetPropertyByDisplayName(ApiManagementName, ResourceGroupName, value); var propertyO = JObject.Parse(property); var backendId = propertyO["value"][0]["properties"]["value"]?.ToString(); backendIds.Add(backendId); } else { backendIds.Add(value); } } } var backends = new JObject(); backends["value"] = new JArray(); foreach (var backendId in backendIds) { var backend = await GetBackendDetailsAsync(ApiManagementName, ResourceGroupName, backendId?.ToString()); var backendO = JObject.Parse(backend); ((JArray)backends["value"]).Add(backendO); } backends["count"] = ((JArray)backends["value"]).Count; return(backends.ToString()); } }