Description
Describe the issue
See minimal repro at https://github.com/johnnyreilly/azure-functions-openapi-extension-error-repro
Consider the following:
public class Alias : System.Collections.Generic.Dictionary<string, string> {
}
public partial class IsBroken {
public Alias? Attributes { get; set; } = default!;
}
public partial class IsWorking {
public System.Collections.Generic.Dictionary<string, string>? Attributes { get; set; } = default!;
}
IsWorking
and IsBroken
are effectively the same. But they trigger different behaviour when used in concert with OpenApiResponseWithBody
. Here is IsBroken
:
[OpenApiOperation(operationId: "greeting", Summary = "Greetings", Description = "This shows a welcome message.", Visibility = OpenApiVisibilityType.Important)]
[OpenApiParameter("name", Type = typeof(string), In = ParameterLocation.Query, Visibility = OpenApiVisibilityType.Important)]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "application/json", bodyType: typeof(IsBroken), Summary = "The response", Description = "This returns the response")]
[FunctionName("NetCoreApp31HttpTrigger")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "greetings")] HttpRequest req,
ILogger log)
{
await Task.Yield();
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
return new OkObjectResult($"hi {name}");
}
When you request the swagger.json
you receive:
[2021-11-10T17:39:55.760Z] swagger.json was requested.
[2021-11-10T17:39:55.848Z] Index was outside the bounds of the array.
However IsWorking
... works.
[OpenApiOperation(operationId: "greeting", Summary = "Greetings", Description = "This shows a welcome message.", Visibility = OpenApiVisibilityType.Important)]
[OpenApiParameter("name", Type = typeof(string), In = ParameterLocation.Query, Visibility = OpenApiVisibilityType.Important)]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "application/json", bodyType: typeof(IsWorking), Summary = "The response", Description = "This returns the response")]
[FunctionName("NetCoreApp31HttpTrigger")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "greetings")] HttpRequest req,
ILogger log)
{
await Task.Yield();
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
return new OkObjectResult($"hi {name}");
}
To Reproduce
There's a reproduction repo here: https://github.com/johnnyreilly/azure-functions-openapi-extension-error-repro
Expected behavior
IsBroken
should have the same behaviour as IsWorking
- it should not trigger the "Index was outside the bounds of the array" error
Screenshots
N/A
Environment (please complete the following information, if applicable):
N/A
Additional context
Having tested historic versions of the package, it looks like it broke between 0.8.1-preview
and 0.9.0-preview
. Rolling back to 0.8.1-preview
makes things work.
I wonder if #247 might be the cause?