На самом деле в моем проекте .NET Core я использую простое средство привязки моделей для обрезки входной строки
public class StringModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
throw new ArgumentNullException(nameof(bindingContext));
ValueProviderResult valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (valueProviderResult != ValueProviderResult.None)
{
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult);
string valueAsString = string.IsNullOrWhiteSpace(valueAsString) ? null : valueAsString.Trim();
bindingContext.Result = ModelBindingResult.Success(valueAsString);
}
return Task.CompletedTask;
}
}
Я использую его через IModelBinderProvider, и он отлично работает при вводе типа string. Однако я заметил, что он не запускается, когда на входе у меня есть коллекция строк, как это
public IActionResult CollectionTrimTest([FromBody] List<string> values)
Чтобы выполнить это, я думаю, что я должен использовать что-то вроде
if (context.Metadata.IsCollectionType)
return new BinderTypeModelBinder(typeof(CollectionModelBinder));
но я действительно не знаю, как реализовать CollectionModelBinder для обрезки результата на основе коллекции строк. Централизация логики обрезки между StringModelBinder и CollectionModelBinder, конечно, была бы очень полезна.