Состояние модели всегда верно в asp.Net Core web Api 2.1.1 - PullRequest
0 голосов
/ 26 октября 2018

Когда я использую .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] к свойству, но в любом случае это значение и переходите к следующему шагу.

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

1 Ответ

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

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

Когда вы используете 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]. Это также задокументировано здесь и здесь .

Для использования этого атрибута требуется версия совместимости 2.1 или выше, установленная через SetCompatibilityVersion. Например, выделенный код в Startup.ConfigureServices устанавливает флаг совместимости 2.2:

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 .

...