Состояние модели всегда истинно в asp.net core web api 2.1.1

Когда я использую .net Core версии 2.1.0 и для проверки состояния модели, используя приведенный ниже код, все работает нормально.

В файл Startup.cs добавьте ниже код

services.AddMvc(config =>
{
    config.Filters.Add(new ValidateModelAttribute());
});

и создайте ValidateModelAttribute вот так

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

но теперь я использую 2.1.1 и пробую все google and SO post but Model State is always true.

даже я отправляю пустой объект json.

В документации сказано, что в 2.1.1 ошибка «Состояние модели» автоматически обрабатывается ApiController, но все же она не дает должного результата. и я также добавляю [Required] в свойство, но в любом случае это ценность и перехожу к следующему шагу.

Если кому-то потребуется дополнительная информация, прокомментируйте. Я добавлю и другую информацию.

Вы можете опубликовать свою модель и подпись вызываемого метода. Вы знаете, что привязка модели работает только тогда, когда модель передается как класс, да? public IActionResult Update([FromBody]MyModel abc) (для [FromBody] требуется только pre-ASP.NET Core без атрибута ApiController), когда у вас есть одна модель точно в параметрах методов

Tseng 26.10.2018 09:25
2
1
1 550
1

Ответы 1

In the documentation it is say that in 2.1.1 the Model State error is automatically handle by the ApiController but still it is not given proper result. and i am also add [Required] on property but in all case it is value and go to next step.

Когда вы используете ASP.NET Core 2.1 (или 2.2, если на то пошло), то новые особенности с измененным поведением (например, [ApiController]) выбирается.

Автоматическая проверка модели с помощью атрибута [ApiController] работает только при включении функций ASP.NET Core 2.1 (или 2.2, если вы используете ASP.NET Core 2.2).

Вы можете сделать это в Startup.cs:

services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)

Это включит автоматическую проверку с атрибутом [ApiController]. Это также задокументировано здесь и здесь.

A compatibility version of 2.1 or later, set via SetCompatibilityVersion, is required to use this attribute. For example, the highlighted code in Startup.ConfigureServices sets the 2.2 compatibility flag:

services.AddMvc()
   .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
   .ConfigureApiBehaviorOptions(options =>
   {
       options.SuppressConsumesConstraintForFormFileParameters = true;
       options.SuppressInferBindingSourcesForParameters = true;
       options.SuppressModelStateInvalidFilter = true;
       options.SuppressMapClientErrors = true;

       options.ClientErrorMapping[404] = "https://httpstatuses.com/404";
   });

Также см. Сообщение в блоге ASP.NET Core 2.1-preview1.

Другие вопросы по теме