@@ -290,6 +290,21 @@ 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 )
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+
293308 private static void WriteHostInfoV2 ( IOpenApiWriter writer , IList < OpenApiServer > servers )
294309 {
295310 if ( servers == null || ! servers . Any ( ) )
@@ -299,11 +314,11 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList<OpenApiServer>
299314
300315 // Arbitrarily choose the first server given that V2 only allows
301316 // one host, port, and base path.
302- var firstServer = servers . First ( ) ;
317+ var serverUrl = ParseServerUrl ( servers . First ( ) ) ;
303318
304319 // Divide the URL in the Url property into host and basePath required in OpenAPI V2
305320 // 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 ) ;
307322
308323 // host
309324 if ( firstServerUrl . IsAbsoluteUri )
@@ -337,7 +352,7 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList<OpenApiServer>
337352 var schemes = servers . Select (
338353 s =>
339354 {
340- Uri . TryCreate ( s . Url , UriKind . RelativeOrAbsolute , out var url ) ;
355+ Uri . TryCreate ( ParseServerUrl ( s ) , UriKind . RelativeOrAbsolute , out var url ) ;
341356 return url ;
342357 } )
343358 . Where (
0 commit comments