@@ -290,6 +290,18 @@ public void SerializeAsV2(IOpenApiWriter writer)
290
290
writer . WriteEndObject ( ) ;
291
291
}
292
292
293
+ private static string ParseServerUrl ( OpenApiServer server )
294
+ {
295
+ var parsedUrl = server . Url ;
296
+
297
+ var variables = server . Variables ;
298
+ foreach ( var variable in variables . Where ( static x => ! string . IsNullOrEmpty ( x . Value . Default ) ) )
299
+ {
300
+ parsedUrl = parsedUrl . Replace ( $ "{{{variable.Key}}}", variable . Value . Default ) ;
301
+ }
302
+ return parsedUrl ;
303
+ }
304
+
293
305
private static void WriteHostInfoV2 ( IOpenApiWriter writer , IList < OpenApiServer > servers )
294
306
{
295
307
if ( servers == null || ! servers . Any ( ) )
@@ -299,11 +311,11 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList<OpenApiServer>
299
311
300
312
// Arbitrarily choose the first server given that V2 only allows
301
313
// one host, port, and base path.
302
- var firstServer = servers . First ( ) ;
314
+ var serverUrl = ParseServerUrl ( servers . First ( ) ) ;
303
315
304
316
// Divide the URL in the Url property into host and basePath required in OpenAPI V2
305
317
// The Url property cannotcontain path templating to be valid for V2 serialization.
306
- var firstServerUrl = new Uri ( firstServer . Url , UriKind . RelativeOrAbsolute ) ;
318
+ var firstServerUrl = new Uri ( serverUrl , UriKind . RelativeOrAbsolute ) ;
307
319
308
320
// host
309
321
if ( firstServerUrl . IsAbsoluteUri )
@@ -337,7 +349,7 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList<OpenApiServer>
337
349
var schemes = servers . Select (
338
350
s =>
339
351
{
340
- Uri . TryCreate ( s . Url , UriKind . RelativeOrAbsolute , out var url ) ;
352
+ Uri . TryCreate ( ParseServerUrl ( s ) , UriKind . RelativeOrAbsolute , out var url ) ;
341
353
return url ;
342
354
} )
343
355
. Where (
0 commit comments