Генерация автореста: как сохранить список <int>список <int>, а не список - PullRequest
2 голосов
/ 23 марта 2020

При создании WebApi с Micrsoft RestClient необходимо учитывать ряд правил, например, вам нужно пометить все ValueType (например, int или System.Guid) как System.ComponentModel.DataAnnotations.RequiredAttribute, иначе AutoRest сделает их System.Nullable<T> в сгенерированном коде.

Но как мне сделать это, чтобы сохранить List<int> a List<int>, а не List<int?>? Использование [Required] в этом случае не помогло.

1 Ответ

1 голос
/ 28 марта 2020

Попробуйте зарегистрировать ISchemaFilter следующим образом, который должен охватывать как общие c коллекции, так и массивы:

    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        var type = context.Type;

        if (type.IsGenericType && type.GetInterface(nameof(IEnumerable)) != null)
        {
            if (type.GenericTypeArguments.Any(genericTypeArgument => genericTypeArgument.IsValueType)) 
                AddNonNullableFieldToSchema(schema);
        }
        else if (type.IsArray && type.GetElementType()?.IsValueType == true)
        {
            AddNonNullableFieldToSchema(schema);
        }
    }

    private static void AddNonNullableFieldToSchema(OpenApiSchema)
    {
        schema.Items.Extensions["x-nullable"] = new OpenApiBoolean(false);
    }
...