Вернуть ошибки привязки модели и текущие ошибки проверки в одном BadRequest - PullRequest
0 голосов
/ 01 мая 2019

На ASP.NET Core 2.2 ApiController у меня есть следующее действие:

public async Task<IActionResult> Create([FromBody]Model model) {

}

Где Model следующее:

public class Model { 
  public String Title { get; set; }
  public DateTime? PublishedAt { get; set; }       
}

Я использую FluentValidation дляпроверьте модель:

public class ModelValidator : AbstractValidator<Model> {

  public ModelValidator() {

    RuleFor(x => x.Title).NotEmpty().MaximumLength(80);

    RuleFor(x => x.PublishedAt).NotNull().Must(x => x < DateTime.Now);

  }

}

Когда PublishedAt недопустим, например, 2019-40-80, ModelValidator не запускается ...

Это потому, что проверка в ASP.NET Coreследует, если я не ошибаюсь, порядок:

  1. Привязка модели

    Возвращает неверный запрос с ошибками, которые произошли в привязке модели.
    Например, еслион не может связать 2019-40-80 с датой?имущество.

  2. Проверка достоверности (при использовании)

  3. Стандартное ядро ​​ASP.NET

Проблема в " 1. Привязка модели"где при использовании [FromBody], который является общим для API.

При использовании [FromBody] NewtonSoft отвечает за синтаксический анализ тела JSON.

Если произойдет сбой, тогдавозвращает ошибки с BadRequest, и ModelValidator не вызывается.

Я пытался со следующим на ConfigureServices:

services.Configure<ApiBehaviorOptions>(x => {

  x.SuppressModelStateInvalidFilter = false;

  x.InvalidModelStateResponseFactory = y => {

    var errors = y.ModelState
      .Where(e => e.Value.Errors.Count > 0)
      .Select(e => new {
        Name = e.Key,
        Message = e.Value.Errors.First().ErrorMessage
      }).ToArray();

    return new BadRequestObjectResult(errors);

  };

}); 

Но не повезло ...

Вопрос

Как вернуть ошибки привязки модели и текущие проверки в одном BadRequest?

Есть ли способ настроить Newtonsoft для создания частичной модели?

...