Skip to content

Commit da0fd1c

Browse files
committed
parse server's url with variables when convert openapi 3.0 to 2.0
1 parent b91a229 commit da0fd1c

4 files changed

+752
-3
lines changed

src/Microsoft.OpenApi/Models/OpenApiDocument.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)