Фильтр действий не запускается, если состояние модели недопустимо - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь создать фильтр пользовательских действий, который должен перехватывать состояние модели и что-то делать в зависимости от текущего состояния (действительное или недействительное).Однако, выполнив некоторые проверки, я понял, что фильтр действий запускается, только если состояние модели уже допустимо, т.е.Если присутствуют все записи входной модели представления.

Примером является моя аутентификация json.У него есть имя пользователя, пароль и секретный ключ.

{
    "Email": "user@apppp.com",
    "Password": "password",
    "SecretKey":""
}

Приведенное выше недопустимое состояние модели, поскольку требуется секретный ключ.Таким образом, фильтр действий не запускается

{
    "Email": "user@apppp.com",
    "Password": "password",
    "SecretKey":"abc"
}

Этот второй является действительным для модели, поэтому фильтр действий работает.Однако я хочу запустить фильтр действий, даже если он недействителен.Как я могу перезаписать это?

ActionFilter

public class ModelValidationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            //context.Result = new ValidationFailedResult(context.ModelState);
            context.Result = new OkObjectResult("Hello");
        }
        else
        {
            context.Result = new OkObjectResult("Bye");
        }
    }
}

1 Ответ

0 голосов
/ 07 октября 2018

ASP.NET Core 2.1 поставляется с атрибутом [ApiController], который используется в шаблонах по умолчанию и добавляет проверку модели ко всем действиям данного контроллера.

Его можно отключить глобально через ApiBehaviorOptions во время запуска:

services.Configure<ApiBehaviorOptions>(options =>
{
    options.SuppressModelStateInvalidFilter = true;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...