Обработка строк с помощью вашей собственной подшивки модели довольно проста.
public class MyBinder : IModelBinderProvider, IModelBinder
{
public IModelBinder GetBinder(ModelBinderProviderContext context) =>
(context.Metadata.ModelType == typeof(string)) ? this : null;
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value != ValueProviderResult.None)
{
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value);
var str = value.FirstValue;
if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && string.IsNullOrWhiteSpace(str))
str = null;
// TODO strip out invalid characters here
bindingContext.Result = ModelBindingResult.Success(str);
}
return Task.CompletedTask;
}
}
options.ModelBinderProviders.Insert(0, new MyBinder());
Если вы хотите возвратить ошибку вместо тихого изменения строк. Вы можете реализовать атрибут валидации и не забывать использовать его везде ...
Или реализовать IModelValidatorProvider
и добавить свой IModelValidator
к каждому значению связанной строки.