public virtual async Task JsonInputFormatter_ValidationWithRecordTypes_ValidationErrors()
    {
        // Arrange
        var expected = new JsonFormatterController.SimpleModelWithValidation(123, "This is a very long name", StreetName: null);

        // Act
        var response = await Client.PostAsJsonAsync($"JsonFormatter/{nameof(JsonFormatterController.RoundtripModelWithValidation)}", expected);

        // Assert
        await response.AssertStatusCodeAsync(HttpStatusCode.BadRequest);

        var problem = await response.Content.ReadFromJsonAsync <ValidationProblemDetails>();

        Assert.Collection(
            problem.Errors.OrderBy(e => e.Key),
            kvp =>
        {
            Assert.Equal("Id", kvp.Key);
            Assert.Equal("The field Id must be between 1 and 100.", Assert.Single(kvp.Value));
        },
            kvp =>
        {
            Assert.Equal("Name", kvp.Key);
            Assert.Equal("The field Name must be a string with a minimum length of 2 and a maximum length of 8.", Assert.Single(kvp.Value));
        },
            kvp =>
        {
            Assert.Equal("StreetName", kvp.Key);
            Assert.Equal("The StreetName field is required.", Assert.Single(kvp.Value));
        });
    }
    public virtual async Task JsonInputFormatter_ValidationWithRecordTypes_NoValidationErrors()
    {
        // Arrange
        var expected = new JsonFormatterController.SimpleModelWithValidation(99, "TestName", "Some address");

        // Act
        var response = await Client.PostAsJsonAsync($"JsonFormatter/{nameof(JsonFormatterController.RoundtripModelWithValidation)}", expected);

        // Assert
        await response.AssertStatusCodeAsync(HttpStatusCode.OK);

        var actual = await response.Content.ReadFromJsonAsync <JsonFormatterController.SimpleModel>();

        Assert.Equal(expected.Id, actual.Id);
        Assert.Equal(expected.Name, actual.Name);
        Assert.Equal(expected.StreetName, actual.StreetName);
    }