.NET Core 2.1 Переопределить автоматическую проверку модели - PullRequest
0 голосов
/ 01 июля 2018

В последней версии .NET Core 2.1 введена автоматическая проверка для проверки состояния модели (https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#mvc).

Ранее я мог переопределить ответ об ошибке проверки с помощью следующего кода:

public class ApiValidateModelAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            context.Result = new BadRequestObjectResult(new context.ModelState);
        }

    base.OnActionExecuting(context);
}

Но теперь это больше не работает. Ответы на ошибки проверяются без ввода метода переопределения.

У кого-нибудь есть подсказка? Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Мой друг недавно спросил меня об этом, и мой подход состоял в том, чтобы заменить ModalStateInvalidFilter по умолчанию на пользовательский.

В моем тесте я реализовал предложение из здесь , а затем:

services.AddMvc(options =>
{
    options.Filters.Add(typeof(ValidateModelAttribute));
});


services.Configure<ApiBehaviorOptions>(options => { options.SuppressModelStateInvalidFilter = true; });
0 голосов
/ 25 июля 2018

Если вы хотите продолжать использовать атрибут ApiController (который имеет другие функции, такие как отключение обычной маршрутизации и разрешение привязки модели без добавления атрибутов параметра [FromBody]), вы можете сделать это с помощью этого в вашем Startup.cs файл:

services.Configure<ApiBehaviorOptions>(opt =>
{
    opt.SuppressModelStateInvalidFilter = true;
});

Это сделает так, что если ModelState будет недействительным, он автоматически не вернет ошибку 400.

...