У меня есть ASP.NET Core API (.Net Core 2.1), и я реализовал Action Filter, используя эту статью
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.1#action-filters
В моей модели я использую аннотации данных для проверки модели, и я добавил атрибут ValidateModel для действия в моем контроллере.
[HttpPost("CreateShipment")]
[ValidateModel]
public IActionResult CreateShipment([FromBody] CreateShipmentRequest request)
{
if (ModelState.IsValid)
{
//Do something
}
return Ok();
}
Я использовал Postman для проверки этого, и мой Фильтр Действий вызывается, только если Модель действительна. Если в моем запросе отсутствует обязательное поле или какое-либо значение выходит за пределы диапазона, фильтр действий не вызывается. Вместо этого я получаю 400 неверных запросов с модельным состоянием в ответе.
Я реализовал фильтр действий, потому что хочу настроить ошибку проверки модели. Насколько я понимаю, фильтры действий вызываются во время привязки модели. Может ли кто-нибудь помочь мне понять, почему это происходит и как заставить работать фильтр действий?
ОБНОВЛЕНИЕ: Я нашел решение через 2 секунды после публикации вопроса, и ссылка @Silvermind, размещенная ниже, также является отличной информацией.
Я добавил следующую строку в мой файл Startup.cs
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
Это хорошо задокументировано здесь, на сайте Microsoft.
https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#automatic-http-400-responses