Azure / azure-functions-openapi-extension

This extension provides an Azure Functions app with Open API capability for better discoverability to consuming parties
https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.OpenApi/
MIT License
375 stars 196 forks source link

Arrays of strings and multipart/form-data #674

Open dluc opened 2 weeks ago

dluc commented 2 weeks ago

I'm writing a function with multipart/form-data, with this signature:

[Function("UploadFile")]
[OpenApiOperation("UploadFile")]
[OpenApiRequestBody(bodyType: typeof(UploadFileRequest), contentType: "multipart/form-data")]
[OpenApiResponseWithBody(bodyType: typeof(UploadFileResponse), contentType: "application/json")]
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest httpRequest)

receiving multipart/form data that contains a file and one array of strings.

public class UploadFileRequest
{
    public byte[] File { get; set; } = [];
    public List<string> Metadata { get; set; } = [];
}

swagger.json describes metadata as

{
    "name": "metadata",
    "description": "",
    "type": "array",
    "items": {
        "type": "string"
    },
    "in": "formData"
}

Swagger UI allows to enter strings, e.g.

Image

Problem

On the service side, metadata is received as a single value.

For instance, swagger UI suggested curl is:

curl -X POST ... -H  ... -F "metadata=a=1,b=2" -F "file=@test.png;type=image/png"

but the request should be:

curl -X POST ... -H  ... -F "metadata=a=1" -F "metadata=b=2" -F "file=@test.png;type=image/png"

Questions