in src/Microsoft.Azure.Functions.Worker.Extensions.OpenApi/Functions/OpenApiTriggerFunction.cs [95:151]
public async Task<HttpResponseData> RenderOpenApiDocument(HttpRequestData req, string version, string extension, FunctionContext ctx)
{
var log = ctx.GetLogger(nameof(OpenApiTriggerFunction));
log.LogInformation($"{version}.{extension} was requested.");
var fi = new FileInfo(ctx.FunctionDefinition.PathToAssembly);
var request = new HttpRequestObject(req);
var result = default(string);
var response = default(HttpResponseData);
try
{
var auth = await this._context
.SetApplicationAssemblyAsync(fi.Directory.FullName, appendBin: false)
.AuthorizeAsync(request)
.ConfigureAwait(false);
if (!auth.IsNullOrDefault())
{
response = req.CreateResponse(auth.StatusCode);
response.Headers.Add("Content-Type", auth.ContentType);
await response.WriteStringAsync(auth.Payload).ConfigureAwait(false);
return response;
}
result = await this._context
.Document
.InitialiseDocument()
.AddMetadata(this._context.OpenApiConfigurationOptions.Info)
.AddServer(request, this._context.HttpSettings.RoutePrefix, this._context.OpenApiConfigurationOptions)
.AddNamingStrategy(this._context.NamingStrategy)
.AddVisitors(this._context.GetVisitorCollection())
.Build(this._context.ApplicationAssembly, this._context.GetOpenApiVersionType(version))
.ApplyDocumentFilters(this._context.GetDocumentFilterCollection())
.RenderAsync(this._context.GetOpenApiSpecVersion(version), this._context.GetOpenApiFormat(extension))
.ConfigureAwait(false);
response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", this._context.GetOpenApiFormat(extension).GetContentType());
await response.WriteStringAsync(result).ConfigureAwait(false);
}
catch (Exception ex)
{
log.LogError(ex.Message);
result = ex.Message;
if (this._context.IsDevelopment)
{
result += "\r\n\r\n";
result += ex.StackTrace;
}
response = req.CreateResponse(HttpStatusCode.InternalServerError);
response.Headers.Add("Content-Type", ContentTypeText);
await response.WriteStringAsync(result).ConfigureAwait(false);
}
return response;
}