Фон
У меня есть веб-интерфейс API, написанный на ядре asp.net v2.1.Это функция, предоставляемая моим сервисом:
[HttpPost]
[Route("submit")]
public async Task<ActionResult<int>> DoIt(CustomModel model)
{
if (!ModelState.IsValid)
return new StatusCodeResult(403); // Custom 403 will be here.
// ...
}
И это CustomModel
:
public class CustomModel
{
[Required]
public int MagicNumber { get; set; }
}
Эта комбинация (метод + модель) работает нормально, пока клиент не наденетне предоставить MagicNumber
серверу.
Проблема
В отличие от старого asp.net (.net framework), когда проверка модели не удалась - автоматическое сообщение об ошибке 403 отправляется клиенту.
Я хочу запретить это поведение по умолчанию и предоставить пользовательское сообщение об ошибке пользователю.Я предпочитаю определять пользовательский ответ следующим образом:
[HttpPost]
[Route("submit")]
public async Task<ActionResult<int>> Submit(CustomModel model)
{
if (!ModelState.IsValid)
return new CustomErrorCode_BadRequest();
//...
}
Вещи, которые я пробовал
Единственный способ предотвратить автоматический ответ "неверный запрос" - добавить этот код вStartup.cs
файл
services.AddMvc(options => options.ModelValidatorProviders.Clear());
После добавления этой строки кода я смог достичь своего оператора if (!ModelState.IsValid)
.До этого запрос был заблокирован на предыдущем шаге.К сожалению, ModelState.IsValid
всегда возвращает true
(независимо от того, что вводится).Я предполагаю, что это потому, что я "очистил" все валидаторы - что звучит как плохая идея.
Как это должно быть сделано?
Спасибо!