in src/Microsoft.Azure.Functions.Worker.Extensions.OpenApi/Document.cs [226:286]
private string Render(OpenApiSpecVersion version, OpenApiFormat format)
{
//var serialised = default(string);
//using (var sw = new StringWriter())
//{
// OpenApiDocumentExtensions.Serialise(this.OpenApiDocument, sw, version, format);
// serialised = sw.ToString();
//}
//return serialised;
// This is the interim solution to resolve:
// https://github.com/Azure/azure-functions-openapi-extension/issues/365
//
// It will be removed when the following issue is resolved:
// https://github.com/microsoft/OpenAPI.NET/issues/747
var jserialised = default(string);
using (var sw = new StringWriter())
{
OpenApiDocumentExtensions.Serialise(this.OpenApiDocument, sw, version, OpenApiFormat.Json);
jserialised = sw.ToString();
}
var yserialised = default(string);
using (var sw = new StringWriter())
{
OpenApiDocumentExtensions.Serialise(this.OpenApiDocument, sw, version, OpenApiFormat.Yaml);
yserialised = sw.ToString();
}
if (version != OpenApiSpecVersion.OpenApi2_0)
{
return format == OpenApiFormat.Json ? jserialised : yserialised;
}
var jo = JsonConvert.DeserializeObject<JObject>(jserialised);
var jts = jo.DescendantsAndSelf()
.Where(p => p.Type == JTokenType.Property && (p as JProperty).Name == "parameters")
.SelectMany(p => p.Values<JArray>().SelectMany(q => q.Children<JObject>()))
.Where(p => p.Value<string>("in") == null)
.Where(p => p.Value<string>("description") != null)
.Where(p => p.Value<string>("description").Contains("[formData]"))
.ToList();
foreach (var jt in jts)
{
jt["in"] = "formData";
jt["description"] = jt.Value<string>("description").Replace("[formData]", string.Empty);
}
var serialised = JsonConvert.SerializeObject(jo, Formatting.Indented);
if (format == OpenApiFormat.Json)
{
return serialised;
}
var converter = new ExpandoObjectConverter();
var deserialised = JsonConvert.DeserializeObject<ExpandoObject>(serialised, converter);
serialised = new SerializerBuilder().Build().Serialize(deserialised);
return serialised;
}