нетто ядро ​​валидация: другой тип результата - PullRequest
0 голосов
/ 18 февраля 2020

Я разрабатываю некоторый Rest API, используя c# в net Core 3, который будет использоваться приложением REACT.

Для проверки я увидел, что возвращаются три различных типа объектов:

1) Для правил, определенных в модели (например, подтвердить пароль)

[Compare("Password")]
public string ConfirmPassword { get; set; }

Я получил этот объект:


{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|ff4cda9e-4dd30d18a2a38002.",
    "errors": {
        "ConfirmPassword": [
            "La password e la password di conferma non coincidono"
        ]
    }
}

2) Для правил паролей, управляемых IdentityProvider, I получил это:

[
    {
        "code": "PasswordTooShort",
        "description": "La password deve essere almeno di 6 caratteri."
    },
    {
        "code": "PasswordRequiresNonAlphanumeric",
        "description": "La password deve contenere almeno un carattere speciale."
    },
    {
        "code": "PasswordRequiresDigit",
        "description": "La password deve contenere almeno un numero ('0'-'9')."
    },
    {
        "code": "PasswordRequiresUpper",
        "description": "La password deve contenere almeno un carattere minuscolo ('A'-'Z')."
    }
]

3) Наконец, для пользовательских ошибок, добавленных с ModelStat.AddModelError, я получил этот объект:

{
    "Key 1": [
        "error messagge 1-1",
        "error messagge 2-1"
    ],
    "Key 2": [
        "error messagge 2-1"
    ]
}

Как я могу обрабатывать все ошибки равномерно?

1 Ответ

1 голос
/ 19 февраля 2020

Если вы хотите, чтобы 1-й формат был везде, вы можете использовать метод ValidationProblem() в своих контроллерах, как в этом примере:

var result = await _userManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
    foreach(var error in result.Errors)
    {
        ModelState.AddModelError("userCreation", error.Description);
    }
    return ValidationProblem();
}

Посмотрите на множественные перегрузки ValidationProblem метод дополнительной настройки.

С другой стороны, если вам не нравится первый формат, вы можете переопределить его, как описано в официальной документации :

services.AddControllers()
    .ConfigureApiBehaviorOptions(options =>
    {
        options.InvalidModelStateResponseFactory = context =>
        {
            // format the response as you wish
            var result = new BadRequestObjectResult(context.ModelState);
            result.ContentTypes.Add(MediaTypeNames.Application.Json);
            result.ContentTypes.Add(MediaTypeNames.Application.Xml);

            return result;
        };
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...