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