Проверка привязки модели пользовательских свойств .net core 2.0 web api - PullRequest
0 голосов
/ 05 декабря 2018

Я использую .net core web api для пользовательского связывания свойства строки запроса & format = a, b, c в перечисляемом списке.Для этого я использую пользовательский IModelBinder следующим образом:

public class RequestedFormatEnumerationBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        var value = valueProviderResult.FirstOrDefault(); // get the value as string
        if (value == null)
        {
            bindingContext.Result = ModelBindingResult.Success(new List<RequestedFormat>() { RequestedFormat.Any });
            return Task.CompletedTask;
        }

        var options = value.Split(",");

        var potentials = Enum.GetNames(typeof(RequestedFormat));

        var formats = options
            .Where(c => potentials.Any(x => x.Equals(c, StringComparison.OrdinalIgnoreCase)))
            .Select(c => (RequestedFormat)Enum.Parse(typeof(RequestedFormat), c, true))
            .ToList();

        bindingContext.Result = ModelBindingResult.Success(formats);

        return Task.CompletedTask;
    }
}

Затем я применяю это к моей модели следующим образом:

    [EnumDataType(typeof(RequestedFormat))]
    [JsonConverter(typeof(StringEnumConverter))]
    [BindProperty(BinderType = typeof(RequestedFormatEnumerationBinder))]
    public IEnumerable<RequestedFormat> Formats { get; set; }

Модуль связывания вызывается и правильно анализируетвход.К сожалению, модель всегда не проходит проверку в свойстве Formats.

Я попытался добавить атрибут проверки и добавить запись состояния проверки в контекст привязки, которая подавляет проверку, но, похоже, ничего не работает.

Какой шаг я пропускаю?

...