Можно ли контролировать реакцию аннотаций .NET Core Data? - PullRequest
0 голосов
/ 03 мая 2019

Я украсил POCO аннотациями данных ядра .net.

public class Foo
{
    [Required]
    [StringLength(100, MinimumLength = 1)]
    public String Name { get;set;}
}

Когда я вызываю контроллер API с недопустимыми данными, эти правила проверки данных начинают работать, возвращая HTTP 400. Полезная нагрузка выглядит как-тов соответствии с:

{
    "name": [
        "The Name field is required."
      ]
}

Мои два вопроса:

  1. Я видел довольно много документов, ссылающихся на ModeState.IsValid, в моем случае контроллерыдаже не вводится и не добавляются никакие фильтры пользовательских действий.

  2. Возможно ли, однако, контролировать / конфигурировать ответ полезной нагрузки?

Я хотел бы вернуть больше структурированного ответа

{
    "reason":"Invalid request",
    "errorCode":"BadFooDetails",
    "data" : {
       "name": [
           "The Name field is required." ]
           } 
}

Основная причина для этого - иметь согласованную структурированную полезную нагрузку ответа ApiError.

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Выяснилось, что я не заметил тонкую разницу между ApiController и Controller (MVC).В случае ApiController он автоматически выполняет валидацию и не дает разработчику возможности валидации в отличие от контроллеров MVC (или просто базового класса Controller).

0 голосов
/ 03 мая 2019

Если я правильно понимаю, вы ищете атрибут ErrorMessage аннотаций данных.

В вашем случае это должно выглядеть примерно так:

[Required(ErrorMessage = "My custom error message")]
[StringLength(100, MinimumLength = 1)]
public string Name { get; set; }

Другой вариант (который я предлагаю) - использовать библиотеку FluentValidation . Очень, очень гибкий.

...