@@ -192,35 +192,23 @@ public async Task<Template> GenerateAPIsARMTemplateAsync(string apimname, string
192
192
operationResource . apiVersion = GlobalConstants . APIVersion ;
193
193
operationResource . scale = null ;
194
194
195
- // add api and schemas to operation dependsOn, if necessary
195
+ // add operation dependencies and fix sample value if necessary
196
196
List < string > operationDependsOn = new List < string > ( ) { $ "[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{ oApiName } ')]" } ;
197
197
foreach ( OperationTemplateRepresentation operationTemplateRepresentation in operationResource . properties . request . representations )
198
198
{
199
- if ( operationTemplateRepresentation . schemaId != null )
200
- {
201
- string dependsOn = $ "[resourceId('Microsoft.ApiManagement/service/apis/schemas', parameters('ApimServiceName'), '{ oApiName } ', '{ operationTemplateRepresentation . schemaId } ')]";
202
- // add value to list if schema has not already been added
203
- if ( ! operationDependsOn . Exists ( o => o == dependsOn ) )
204
- {
205
- operationDependsOn . Add ( dependsOn ) ;
206
- }
207
- }
199
+ AddSchemaDependencyToOperationIfNecessary ( oApiName , operationDependsOn , operationTemplateRepresentation ) ;
200
+ ArmEscapeSampleValueIfNecessary ( operationTemplateRepresentation ) ;
208
201
}
202
+
209
203
foreach ( OperationsTemplateResponse operationTemplateResponse in operationResource . properties . responses )
210
204
{
211
205
foreach ( OperationTemplateRepresentation operationTemplateRepresentation in operationTemplateResponse . representations )
212
206
{
213
- if ( operationTemplateRepresentation . schemaId != null )
214
- {
215
- string dependsOn = $ "[resourceId('Microsoft.ApiManagement/service/apis/schemas', parameters('ApimServiceName'), '{ oApiName } ', '{ operationTemplateRepresentation . schemaId } ')]";
216
- // add value to list if schema has not already been added
217
- if ( ! operationDependsOn . Exists ( o => o == dependsOn ) )
218
- {
219
- operationDependsOn . Add ( dependsOn ) ;
220
- }
221
- }
207
+ AddSchemaDependencyToOperationIfNecessary ( oApiName , operationDependsOn , operationTemplateRepresentation ) ;
208
+ ArmEscapeSampleValueIfNecessary ( operationTemplateRepresentation ) ;
222
209
}
223
210
}
211
+
224
212
operationResource . dependsOn = operationDependsOn . ToArray ( ) ;
225
213
templateResources . Add ( operationResource ) ;
226
214
@@ -342,7 +330,28 @@ public async Task<Template> GenerateAPIsARMTemplateAsync(string apimname, string
342
330
return armTemplate ;
343
331
}
344
332
345
- public static JObject FormatoApi ( string singleApiName , JObject oApi )
333
+ private static void ArmEscapeSampleValueIfNecessary ( OperationTemplateRepresentation operationTemplateRepresentation )
334
+ {
335
+ if ( ! string . IsNullOrWhiteSpace ( operationTemplateRepresentation . sample ) && operationTemplateRepresentation . contentType == "application/json" && JToken . Parse ( operationTemplateRepresentation . sample ) . Type == JTokenType . Array )
336
+ {
337
+ operationTemplateRepresentation . sample = "[" + operationTemplateRepresentation . sample ;
338
+ }
339
+ }
340
+
341
+ private static void AddSchemaDependencyToOperationIfNecessary ( string oApiName , List < string > operationDependsOn , OperationTemplateRepresentation operationTemplateRepresentation )
342
+ {
343
+ if ( operationTemplateRepresentation . schemaId != null )
344
+ {
345
+ string dependsOn = $ "[resourceId('Microsoft.ApiManagement/service/apis/schemas', parameters('ApimServiceName'), '{ oApiName } ', '{ operationTemplateRepresentation . schemaId } ')]";
346
+ // add value to list if schema has not already been added
347
+ if ( ! operationDependsOn . Exists ( o => o == dependsOn ) )
348
+ {
349
+ operationDependsOn . Add ( dependsOn ) ;
350
+ }
351
+ }
352
+ }
353
+
354
+ private static JObject FormatoApi ( string singleApiName , JObject oApi )
346
355
{
347
356
if ( singleApiName != null )
348
357
{
@@ -364,7 +373,7 @@ public static JObject FormatoApi(string singleApiName, JObject oApi)
364
373
return oApi ;
365
374
}
366
375
367
- public async Task < List < TemplateResource > > GenerateSchemasARMTemplate ( string apimServiceName , string apiName , string resourceGroup , string fileFolder )
376
+ private async Task < List < TemplateResource > > GenerateSchemasARMTemplate ( string apimServiceName , string apiName , string resourceGroup , string fileFolder )
368
377
{
369
378
List < TemplateResource > templateResources = new List < TemplateResource > ( ) ;
370
379
@@ -382,7 +391,7 @@ public async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apim
382
391
// pull returned schema and convert to template resource
383
392
RESTReturnedSchemaTemplate restReturnedSchemaTemplate = JsonConvert . DeserializeObject < RESTReturnedSchemaTemplate > ( schemaDetails ) ;
384
393
SchemaTemplateResource schemaDetailsResource = JsonConvert . DeserializeObject < SchemaTemplateResource > ( schemaDetails ) ;
385
- schemaDetailsResource . properties . document . value = JsonConvert . SerializeObject ( restReturnedSchemaTemplate . properties . document ) ;
394
+ schemaDetailsResource . properties . document . value = GetSchemaValueBasedOnContentType ( restReturnedSchemaTemplate . properties ) ;
386
395
schemaDetailsResource . name = $ "[concat(parameters('ApimServiceName'), '/{ apiName } /{ schemaName } ')]";
387
396
schemaDetailsResource . apiVersion = GlobalConstants . APIVersion ;
388
397
schemaDetailsResource . dependsOn = new string [ ] { $ "[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{ apiName } ')]" } ;
@@ -392,5 +401,33 @@ public async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apim
392
401
}
393
402
return templateResources ;
394
403
}
404
+
405
+ private string GetSchemaValueBasedOnContentType ( RESTReturnedSchemaTemplateProperties schemaTemplateProperties )
406
+ {
407
+ if ( ! ( schemaTemplateProperties . document is JToken ) )
408
+ {
409
+ return JsonConvert . SerializeObject ( schemaTemplateProperties . document ) ;
410
+ }
411
+
412
+ var schemaJson = schemaTemplateProperties . document as JToken ;
413
+
414
+ switch ( schemaTemplateProperties . contentType . ToLowerInvariant ( ) )
415
+ {
416
+ case "application/vnd.ms-azure-apim.swagger.definitions+json" :
417
+ if ( schemaJson [ "definitions" ] != null && schemaJson . Count ( ) == 1 )
418
+ {
419
+ schemaJson = schemaJson [ "definitions" ] ;
420
+ }
421
+ break ;
422
+ case "application/vnd.ms-azure-apim.xsd+xml" :
423
+ if ( schemaJson [ "value" ] != null && schemaJson . Count ( ) == 1 )
424
+ {
425
+ return schemaJson [ "value" ] . ToString ( ) ;
426
+ }
427
+ break ;
428
+ }
429
+
430
+ return JsonConvert . SerializeObject ( schemaJson ) ;
431
+ }
395
432
}
396
433
}
0 commit comments