Web API - ошибка переопределения состояния модели при сбое привязки модели при неверном вводе - PullRequest
0 голосов
/ 01 ноября 2018

Я использую ASP.NET Core 2.1. Я пытаюсь переопределить сообщение об ошибке по умолчанию, которое возвращается при сбое привязки модели из-за неверного ввода.

Когда я публикую неверное значение для ScheduledTime (например, я передаю "abc" в качестве значения), я получаю сообщение об ошибке ниже. Я хочу переопределить сообщение об ошибке, чтобы отобразить что-то более удобное для пользователя.

Есть ли что-то, что я могу установить в процессе проверки или в другом месте, чтобы переопределить сообщение?

{
    "scheduledTime": [
        "Could not convert string to DateTime: abc. Path 'scheduledTime', line 5, position 23."
    ]
}

Ниже моя внешняя модель. Обратите внимание, что ScheduledTime установлен как обнуляемый должным образом, чтобы предотвратить недостаточную публикацию, поскольку это будет необходимо.

 public class EventInputDto
    {
        public string Title { get; set; }
        public string Message { get; set; }
        public string Url { get; set; }
        public DateTime? ScheduledTime { get; set; }
        public Guid UserId { get; set; }
    }

Я не использую DataAnnotations в своих классах моделей (я использую их в своих сущностях), а вместо этого использую FluentValidation для своих моделей.

 public EventInputValidator()
        {
            RuleFor(inputDto => inputDto.Title).NotNull().WithMessage("Title cannot be blank")
              .Length(1,50);

            RuleFor(inputDto => inputDto.Message).NotNull().WithMessage("Message cannot be blank")
              .Length(1, 1000);

            RuleFor(inputDto => inputDto.Url).NotNull();

            RuleFor(inputDto => inputDto.ScheduledTime).NotNull();

            RuleFor(inputDto => inputDto.UserId).NotNull();

        }

Ниже приведено действие для публикации на моем контроллере:

[HttpPost]
        public async Task<IActionResult> PostEvent([FromBody] EventInputDto eventInputDto)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var user = await _userRepository.GetUserAsync(eventInputDto.UserId);

            if(user == null)
            {
                return BadRequest(new {Error = "The user was not found in the system. Please try again with an authorized and valid user."});
            }

            var eventToAdd = _mapper.Map<Event>(eventInputDto);

            eventToAdd.CreatedBy = user;
            _eventRepository.AddEvent(eventToAdd);
            if(!await _eventRepository.SaveChangesAsync())
            {
                throw new Exception("Error saving to the database");
            }

            var eventToReturn = _mapper.Map<EventViewDto>(eventToAdd);

            return CreatedAtAction("GetEvent", new { id = eventToAdd.Id }, eventToReturn);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...