Skip to content

Commit da71361

Browse files
Merge pull request #1293 from TinaLiu02/parse-server-variable
parse server's url with variables when convert openapi spec 3.0 to 2.0
2 parents b91a229 + bd12c69 commit da71361

4 files changed

+749
-3
lines changed

src/Microsoft.OpenApi/Models/OpenApiDocument.cs

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

Comments
 (0)