У меня есть контроллер WebAPI, который принимает модель в качестве paylod. В полезной нагрузке у меня есть данные типа string, int и double. Для строковых полей я могу переопределить ErrorMessage для обязательной аннотации, но для int и double она не работает.
Model :
public sealed class BudgetPayload
{
[JsonProperty("total_amount")]
[Required(ErrorMessage = "test amn")]
public double TotalAmount { get; set; }
[JsonProperty("entity_id")]
[Required(ErrorMessage = "test ent")]
public int EntityID { get; set; }
[JsonProperty("currency")]
[Required(ErrorMessage ="test curr")]
public string Currency { get; set; }
}
Контроллер :
publi c asyn c Задача CreateBudget (запрос BudgetPayload) {
if (ModelState.IsValid)
{
}
else
{
string messages = string.Join("; ", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => x.Exception != null ? x.Exception.Message.Split(',')[0] : x.ErrorMessage.Split(',')[0]));
messages = Regex.Replace(messages, "in json. path ''", "", RegexOptions.IgnoreCase);
return base.Respond<List<string>>(messages.Split(';').ToList<string>(), HttpStatusCode.BadRequest);
}
}
Результат :
Исключение :
{"Обязательное свойство 'total_amount' не найдено в JSON. Path '', строка 12, позиция 1. "} System.Exception {Newtonsoft. Json .JsonSerializationException}