Я использую .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.
Я попытался добавить атрибут проверки и добавить запись состояния проверки в контекст привязки, которая подавляет проверку, но, похоже, ничего не работает.
Какой шаг я пропускаю?