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

Validation, is it even working ? #653

Open newportg opened 6 months ago

newportg commented 6 months ago

I've created a class, below, which has been decorated to set the type and the maximum length.

public class Test
{
    [OpenApiProperty(Nullable = true, Description = "The unique message id of the request")]
    [DataType(DataType.Text)]
    [StringLength(10, MinimumLength = 1, ErrorMessage = "Eeeek")]
    public string ExternalRef { get; set; }
}

In the progam.cs if I set the Openapi version to Version 2

var options = new OpenApiConfigurationOptions() { OpenApiVersion = OpenApiVersionType.V2, }

The Swagger GUI will let me enter a string up to the Maximum length, and pass the call to to the azure function. :) If I exceed the Maximum length the the Swagger GUI does nothing, no errors or change of colour, nothing. :(

If I update the OpenApiVersion to Version 3 Then every time, whether the string is shorter or longer than the maximum length the call will be passed to the azure function :(

Just for completeness my function is below

    [Function("Function2")]
    [OpenApiOperation(operationId: "Function2")]
    [OpenApiRequestBody(contentType: "application/json", bodyType: typeof(Test), Description = "Test Object", Required = true)]
    [OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "text/plain", bodyType: typeof(string), Description = "The OK response")]
    public HttpResponseData Function2([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
    {
        _logger.LogInformation("C# HTTP trigger function processed a request.");

        using var bodyReader = new StreamReader(req.Body);
        var body = bodyReader.ReadToEndAsync().Result;

        var data = JsonConvert.DeserializeObject<Test>(body);

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.WriteStringAsync("Hello!!! " + data.ExternalRef);
        return response;
    }

This is a Isolated Azure Function V4 .Net 8

What I'd like to know:- 1, How do I set my openapi configuration so that the swagger GUI obeys the schema restrictions. 2, How do I set the openapi configuration so that the swagger GUI will indicate that something is wrong.

Thanks