.NET 6 Web API — проверка тела запроса JSON для создания единого ответа об ошибке

Я хочу проверить тело запроса JSON, чтобы предоставить унифицированный ответ об ошибке.

В настоящее время, если в теле JSON есть недопустимый символ, я получаю

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "00-5c7b8c1fc5a3a1226dde24ce151cc9a5-889d7f82a7a1e72f-00",
  "errors": {
    "$": [
      "'\"' is invalid after a property name. Expected a ':'. Path: $ | LineNumber: 1 | BytePositionInLine: 12."
    ]
  }
}

Где, как выглядит мой стандартный ответ об ошибке,

{
  "statusCode": 400,
  "message": "Missing required fields: FIELD1",
  "errorCode": "FIELDS_MISSING",
  "target": "ValidateFields",
  "innerError": "Somerror"
}

Как я могу вернуть проверку JSON в унифицированном объекте ответа на ошибку?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно вашему описанию, я предлагаю вам попробовать метод ниже, чтобы настроить результат проверки.

Добавьте ApiBehaviorOptions, чтобы настроить ошибку недопустимого запроса.

builder.Services.Configure<ApiBehaviorOptions>(o =>
{
    o.InvalidModelStateResponseFactory = actionContext =>
    {

        List<Error> error = actionContext.ModelState
                    .Where(modelError => modelError.Value.Errors.Count > 0)
                    .Select(modelError => new Error
                    {
                        ErrorField = modelError.Key,
                        ErrorDescription = modelError.Value.Errors.FirstOrDefault().ErrorMessage
                    }).ToList();

        return new BadRequestObjectResult(error);
    };
});

Класс ошибки:

 public class Error
    {
        public string ErrorField { get; set; }
        public string ErrorDescription { get; set; }
    }

Результат:

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