Любым способом мы можем переопределить ответ аннотации данных в asp.net ядро 3.1

#data-annotations #asp.net-core-3.1

#данные-аннотации #asp.net-core-3.1

Вопрос:

у меня есть проект .net core 3.1 web api. Я ввел некоторую проверку аннотации данных в свои модели. мой ответ о проверке выглядит так

 {
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "|41a37de5-4212fb57b7a19a61.",
  "errors": {
    "fk_entity_id": [
      "Please enter a value bigger than 0"
    ]
  }
}
 

любым способом я могу переопределить этот ответ, например

 {
  "success": "failed", 
  "message": "validation error occured", 
  "errors": {
    "fk_entity_id": [
      "Please enter a value bigger than 0"
    ]
  }
}
 

найдите одну статью, но, похоже, она связана с asp.net ядро более старой версии
https://www.c-sharpcorner.com/blogs/customizing-model-validation-response-resulting-as-http-400-in-net-core

Я пробовал следовать, но все тот же ответ

 private void CustomValidationResponse(IServiceCollection services)
        {
            services.Configure<ApiBehaviorOptions>(
                options => options.InvalidModelStateResponseFactory = actionContext =>
                {
                    return CustomErrorResponse(actionContext);
                }
                );
        }
        
          private BadRequestObjectResult CustomErrorResponse(ActionContext actionContext)
        {
            var errorRecordList = 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(new
            {
                success = "failed",
                message = "Validation error occured",
                errors = errorRecordList
            });
        }
 

Ответ №1:

Проблема заключалась в размещении CustomValidationResponse внутри

 public void ConfigureServices(IServiceCollection services)
 

Когда я добавил его в последний раз, это сработало