Основной фильтр действий ASP.NET не вызывается - PullRequest
2 голосов
/ 07 марта 2019

У меня есть 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

1 Ответ

2 голосов
/ 08 марта 2019

Добавление следующей строки в Startup.cs, метод ConfigureServices () решил проблему.Оказывается, в .Net Core по умолчанию включено 400 автоматических ответовЕсли вы хотите добавить пользовательские фильтры действий, вам нужно установить эти параметры при запуске.

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

...