Обработка автоматической проверки модели

У меня проблема, когда всякий раз, когда я ввожу строковый запрос для целочисленного и логического типа данных. У меня странные сообщения об ошибках, вызванные новой функцией NET CORE2.1 Автоматическая проверка модели.

Вот запрос

{   
    "EmailAddress" : "[email protected]",
    "EmailAddressConfirm" : "[email protected]",
    "FirstName" : "KL",
    "MiddleName": "M",
    "LastName" : "Lawingco",
    "InquiryTypeID": "asda" ,
    "InquiryContent" : "test",
    "Validation" : true,
    "TermsAndCondition" : false
}

И выдает вот такую ​​ошибку

Не удалось преобразовать строку в целое число: asda. Путь «InquiryTypeID», строка 7, позиция 26.

Обратите внимание, что я также использую FluentValidation, но с версии 2.1 была введена автоматическая проверка модели. Мой вопрос: могу ли я изменить сообщение об ошибке всякий раз, когда неправильный ввод был введен для типа данных int или boolean

Я попытался отключить автоматическую проверку модели, используя это

services.Configure<ApiBehaviorOptions>(opt =>
{
    opt.SuppressModelStateInvalidFilter = true;
});

Но это также убивает мою FluentValidation

Вот моя модель

public class NewInquiry
{
    public string EmailAddress{ get; set; }

    public string FirstName { get; set; }

    public string MiddleName { get; set; }

    public string LastName { get; set; }

    public string EmailAddressConfirm { get; set; }

    public int? InquiryTypeID { get; set; }

    public string InquiryContent { get; set; }

    public bool Validation { get; set; }

    public bool TermsAndCondition { get; set; }

}

Надеюсь, вы можете мне помочь, спасибо


person keysl    schedule 12.09.2018    source источник
comment
stackoverflow.com/questions/51439664/ - это может быть то, что вы ищете.   -  person sbso    schedule 12.09.2018
comment
Спасибо, но это всего лишь модификация структуры ответа на ошибку. :( Я уже смог изменить свою структуру ошибок с помощью фильтров   -  person keysl    schedule 12.09.2018


Ответы (1)


Да, вы можете настроить/локализировать все сообщения об ошибках ввода модели ModelBinding.

в вашем файле запуска вы можете получить доступ к ModelBindingMessageProvider и установить все сообщения привязки модели:

services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
    .AddMvcOptions(o =>
    {
        o.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor((x, y) =>
            string.Format("The value '{0}' is not valid for '{1}'", x, y));

        o.ModelBindingMessageProvider.SetMissingBindRequiredValueAccessor((x) => 
            string.Format("A value for the '{0}' property was not provided", x));

        o.ModelBindingMessageProvider.SetMissingKeyOrValueAccessor(() => 
            "A value is required");

        o.ModelBindingMessageProvider.SetMissingRequestBodyRequiredValueAccessor(() => 
            "A non-empty request body is required");

        o.ModelBindingMessageProvider.SetNonPropertyAttemptedValueIsInvalidAccessor((x) => 
            string.Format("The value '{0}' is not valid", x));

        o.ModelBindingMessageProvider.SetNonPropertyUnknownValueIsInvalidAccessor(() => 
            "The supplied value is invalid");

        o.ModelBindingMessageProvider.SetNonPropertyValueMustBeANumberAccessor(() => 
            "The field must be a number");

        o.ModelBindingMessageProvider.SetUnknownValueIsInvalidAccessor((x) => 
            string.Format("The supplied value is invalid for {0}", x));

        o.ModelBindingMessageProvider.SetValueIsInvalidAccessor((x) => 
            string.Format("The value '{0}' is invalid", x));

        o.ModelBindingMessageProvider.SetValueMustBeANumberAccessor((x) => 
            string.Format("The field '{0}' must be a number", x));

        o.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor((x) => 
            string.Format("The field '{0}' must not be null", x));
    });

тот же подход можно использовать и для локализации

person LazZiya    schedule 12.09.2018