微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们可以通过任何方式覆盖 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 core老版本有关 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
            });
        }

解决方法

问题是在里面放置了 CustomValidationResponse

ex)
backup_file --------delete---------current
         |________(skip query)__________|
                  archive files

当我最后添加它时它起作用了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。