У меня проблема с тем, что всякий раз, когда я ввожу строковый запрос для целочисленный и логический тип данных. У меня появляются странные сообщения об ошибках, вызванные новой функцией NET CORE2.1 Автоматическая проверка модели.
Вот просьба
{
"EmailAddress" : "[email protected]",
"EmailAddressConfirm" : "[email protected]",
"FirstName" : "KL",
"MiddleName": "M",
"LastName" : "Lawingco",
"InquiryTypeID": "asda" ,
"InquiryContent" : "test",
"Validation" : true,
"TermsAndCondition" : false
}
И это выдаст такую ошибку
Could not convert string to integer: asda. Path 'InquiryTypeID', line 7, position 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; }
}
Надеюсь, ты сможешь мне помочь, спасибо
Спасибо, но это всего лишь модификация структуры ответа на ошибку. :( Я уже могу изменить структуру ошибок с помощью фильтров
Да, вы можете настроить / локализовать все сообщения об ошибках 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));
});
тот же подход можно использовать и для локализации