Как переопределить сообщение об ошибке состояния модели в asp.net Core 2.1? - PullRequest
0 голосов
/ 31 мая 2018

Кажется, я не могу переопределить сообщение об ошибке проверки состояния модели для int или для значений int?.В предыдущих версиях Asp.Net Core я раньше получал, что ввод недействителен, теперь я получаю эту недружественную ошибку,

{"streetNo": ["Не удалось преобразовать строку в целое число: abc. Путь 'cityId', строка 24, позиция 23. "]}

, поэтому я пытаюсь обойти его, используя пользовательский атрибут проверки,

Я создал этот класс,

 public class IsInt : ValidationAttribute {
        public IsInt () : base () { }

        public override bool IsValid (object value) {
            Console.WriteLine (value);
            if (value.IsNullObject ()) {
                return true;
            } else {
                if (value.GetType () == typeof (int?)) {
                    return true;

                } else {
                    return false;
                }
            }
        }
        protected override ValidationResult IsValid (
            Object value,
            ValidationContext validationContext) {

            var message = "Only number is allowed";
            return new ValidationResult (message);
        }
    }

и я реализую его таким образом,

[IsInt]
public int? StreetNo { get; set; }

Атрибут проверки не работает должным образом, если я ввожу строку, то есть "abc", я все еще получаюупомянутое сообщение об ошибке модели, оно работает только в том случае, если в строке есть числа, например "83444"

Чего мне здесь не хватает?

1 Ответ

0 голосов
/ 01 июля 2018

У меня была похожая проблема, я хотел переопределить сообщения, чтобы они не всегда отображали «Поле MyLongDescriptivePropertyName должно быть числом» непосредственно для пользователя.Оказывается, есть простой способ сделать это внутри Startup.cs:

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // MVC
        services.AddMvc(o =>
        {
            o.ModelBindingMessageProvider.SetValueMustBeANumberAccessor(val => "Must be a number.");
        });
    }

Описание класса здесь на самом деле не объясняет и не приводит примеров.Я нашел этот пост , который был близок, но с тех пор они добавили Set...Accessor() методы, так что вы теперь так и назначаете.

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