2

使用 Micrsoft RestClient 生成 WebApi 时,需要考虑许多规则,例如,您需要将所有ValueType(如intSystem.Guid)标记为System.ComponentModel.DataAnnotations.RequiredAttribute,否则 AutoRest 将System.Nullable<T>在生成的代码中生成它们。

但是我该怎么做才能保持List<int>aList<int>而不是List<int?>?在这种情况下,使用[Required]没有任何帮助。

4

1 回答 1

1

尝试像这样注册一个 ISchemaFilter ,它应该涵盖通用集合和数组:

    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);
    }
于 2020-03-27T21:15:10.917 回答