Глобальная проверка строки в ядре ASP. NET для черного списка некоторых символов - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть приложение ASP. NET, работающее под. NET Core 3.1.

Я хотел бы включить в черный список некоторые символы для (например, ASCII NUL (0x0), SOH ( 0x1), backspace, ...)

Мне бы хотелось переопределить механизм связывания строковых моделей, если такая функция есть.

Есть ли простой способ?

1 Ответ

1 голос
/ 28 февраля 2020

Обработка строк с помощью вашей собственной подшивки модели довольно проста.

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 к каждому значению связанной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...