Я переопределил все сообщения привязки модели с переводами, используя ModelBindingMessageProvider.SetValueIsInvalidAccessor
и другие значения ModelBindingMessageProvider, чтобы вернуть мои собственные строки ресурсов.
А потом я обнаружил печальную правду. Если мой контроллер API получает данные в виде JSON, то сообщения проверки ModelBindingMessageProvider не используются. Вместо этого включается Json.Net, и я получаю что-то вроде этого:
"errors": {
"countryId": [
"Input string '111a' is not a valid number. Path 'countryId', line 3, position 23."
]
},
Я посмотрел в GitHub источник Json.Net - действительно, похоже, что такие точные сообщения об ошибках определены с номерами строк и т. Д.
Итак, ModelState управляет их извлечением вместо использования собственных сообщений ModelBindingMessageProvider.
Я пытался отключить обработку ошибок Json.Net:
.AddJsonOptions(options =>
{
...
options.SerializerSettings.Error = delegate (object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
{
// ignore them all
args.ErrorContext.Handled = true;
};
})
но это не имело значения.
Есть ли способ отловить эти ошибки десериализации Json и перенаправить их в ModelBindingMessageProvider, чтобы мои локализованные сообщения работали?