La validación de ModelBinder se rompe en getter usando la reflexión

Me he encontrado con un problema que parece estar relacionado con la validación de la reflexión y la carpeta de modelos, yFormatterParameterBinding.ExecuteBindingAsync(..) en particular, y aunque puedo usar un Método para hacer lo que quiero, lo preferiría si pudiera usar una Propiedad.

Aquí estoy buscando información sobre el proceso de validación de la carpeta de modelos, por qué no puedo hacer lo que quiero y cómo puedo solucionar el problema o solucionarlo.

La puesta en marcha

public class ModelBindingValidationBreaker
{
    public ModelBindingValidationBreaker()
    {
        Properties = new List<string>();
    }

    public int A { get; set; }
    public int B { get; set; }
    public IList<string> Properties { get; set; }

    /*// Uncomment to break the model binder validation!
    public IList<PropertyInfo> PropertyInfos
    {
        get
        {
            return GetType()
                .GetProperties()
                .Where(pi => Properties.Contains(pi.Name))
                .ToList();
        }
    }//*/

    public IList<PropertyInfo> GetPropertyInfos()
    {
        return GetType()
            .GetProperties()
            .Where(pi => Properties.Contains(pi.Name))
            .ToList();
    }

    public IList<int> LetterCounts
    {
        get
        {
            return Properties.Select(p => p.Length).ToList();
        }
    }
}

Y un controlador con una acción posterior definida como esta.

public void Post(ModelBindingValidationBreaker breaker){...}

Llámalo con este tipo de json:

{
    "Properties": [
        "A"
    ],
    "A": 1,
    "B": 2
}

Si entra en la acción, puede ver que el interruptor está correctamente instanciado y puede llamarGetPropertyInfos() Sin ningún problema.

Como se rompe

Sin embargo, si elimina el comentario de la propiedad PropertyInfos, se rompe la validación de la carpeta de modelos. Agregué un trazador simple para resolver esto. Muestra la siguiente salida relevante:

System.Web.Http.Action: ApiControllerActionSelector;SelectAction;Selected action 'Post(ModelBindingValidationBreaker breaker)'
System.Web.Http.ModelBinding: HttpActionBinding;ExecuteBindingAsync;
System.Web.Http.ModelBinding: FormatterParameterBinding;ExecuteBindingAsync;Binding parameter 'breaker'
System.Net.Http.Formatting: JsonMediaTypeFormatter;ReadFromStreamAsync;Type='ModelBindingValidationBreaker', content-type='application/json'
System.Net.Http.Formatting: JsonMediaTypeFormatter;ReadFromStreamAsync;Value read='OverPostCount.Models.ModelBindingValidationBreaker'
System.Web.Http.ModelBinding: FormatterParameterBinding;ExecuteBindingAsync;
System.Web.Http.ModelBinding: HttpActionBinding;ExecuteBindingAsync;
System.Web.Http.Controllers: CustomController;ExecuteAsync;
System.Net.Http.Formatting: DefaultContentNegotiator;Negotiate;Type='HttpError', formatters=[JsonMediaTypeFormatterTracer, FormUrlEncodedMediaTypeFormatterTracer, FormUrlEncodedMediaTypeFormatterTracer]

Que contiene esta línea en su lugar, cuando se excluye la ofensiva get_PropertyInfos:

System.Web.Http.ModelBinding: FormatterParameterBinding;ExecuteBindingAsync;Parameter 'breaker' bound to the value 'OverPostCount.Models.ModelBindingValidationBreaker'

AñadiendoDataContract, y atributos relacionados como[IgnoreDataMember] en Propiedades no soluciona el problema. Tampoco lo hace[Bind(Exclude="Properties")] desde el espacio de nombres mvc. Linq no parece ser el problema, ya queLetterCount No rompe la validación del modelo de carpeta.

Mis preguntas

¿Por qué el administrador de PropertyInfos rompe el validador de la carpeta de modelos?¿Es esto un error en el web-api de Asp.NET?¿Hay alguna forma de evitar esta ruptura a través de los atributos, un validador de carpetas de modelos personalizado, un servicio o similar?

Básicamente, no quiero desactivar la validación de enlace del modelo para toda la clase o el controlador, pero si pudiera desactivarlo para la propiedad Propiedades, ¡sería genial!

Respuestas a la pregunta(1)

Su respuesta a la pregunta