Я использую 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);
}