@@ -290,6 +290,18 @@ public void SerializeAsV2(IOpenApiWriter writer)
290290 writer . WriteEndObject ( ) ;
291291 }
292292
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+
293305 private static void WriteHostInfoV2 ( IOpenApiWriter writer , IList < OpenApiServer > servers )
294306 {
295307 if ( servers == null || ! servers . Any ( ) )
@@ -299,11 +311,11 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList<OpenApiServer>
299311
300312 // Arbitrarily choose the first server given that V2 only allows
301313 // one host, port, and base path.
302- var firstServer = servers . First ( ) ;
314+ var serverUrl = ParseServerUrl ( servers . First ( ) ) ;
303315
304316 // Divide the URL in the Url property into host and basePath required in OpenAPI V2
305317 // 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 ) ;
307319
308320 // host
309321 if ( firstServerUrl . IsAbsoluteUri )
@@ -337,7 +349,7 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList<OpenApiServer>
337349 var schemes = servers . Select (
338350 s =>
339351 {
340- Uri . TryCreate ( s . Url , UriKind . RelativeOrAbsolute , out var url ) ;
352+ Uri . TryCreate ( ParseServerUrl ( s ) , UriKind . RelativeOrAbsolute , out var url ) ;
341353 return url ;
342354 } )
343355 . Where (
0 commit comments