asp.net-core - 在单个 BadRequest 中返回模型绑定错误和流利验证错误
问题描述
在 ASP.NET Core 2.2 ApiController 我有以下操作:
public async Task<IActionResult> Create([FromBody]Model model) {
}
以下内容在哪里Model
:
public class Model {
public String Title { get; set; }
public DateTime? PublishedAt { get; set; }
}
我FluentValidation
用来验证模型:
public class ModelValidator : AbstractValidator<Model> {
public ModelValidator() {
RuleFor(x => x.Title).NotEmpty().MaximumLength(80);
RuleFor(x => x.PublishedAt).NotNull().Must(x => x < DateTime.Now);
}
}
什么时候无效,PublishedAt
例如不运行...2019-40-80
ModelValidator
这是因为 ASP.NET Core 中的验证如下,如果我没记错的话,顺序如下:
模型绑定
返回在模型绑定中发生错误的错误请求。
例如,如果它不能绑定2019-40-80
到 DateTime?财产。流利的验证(使用时)
- 默认 ASP.NET Core
问题出在“ 1. Model Binding ”中,其中使用[FromBody]
哪个 API 很常见。
使用时[FromBody]
NewtonSoft 负责解析正文 JSON。
如果失败,则返回带有 BadRequest 的错误,并且不调用 ModelValidator。
我一直在 ConfigureServices 上尝试以下操作:
services.Configure<ApiBehaviorOptions>(x => {
x.SuppressModelStateInvalidFilter = false;
x.InvalidModelStateResponseFactory = y => {
var errors = y.ModelState
.Where(e => e.Value.Errors.Count > 0)
.Select(e => new {
Name = e.Key,
Message = e.Value.Errors.First().ErrorMessage
}).ToArray();
return new BadRequestObjectResult(errors);
};
});
但没有运气...
问题
如何在单个 BadRequest 中返回模型绑定错误和流利验证错误?
有没有办法配置 Newtonsoft 来创建部分模型?
解决方案
推荐阅读
- docker - 如何在 Jenkins 文件中构建多个容器?
- gitlab - 如何在免费版本的 gitlab 中设置 Code Review
- c++ - C++ 17 中不定参数函数的错误
- html - 社交图标在网站上不可见
- excel - Visual Basic 为什么会出现 Object 错误?
- python - 在弹性搜索中进行批量上传时获取`TypeError:unhashable type:'dict'`
- java - org.json.JSONException:java.lang.String 类型的值 java.io.IOException 无法转换为 JSONArray
- javascript - 使用JS控制isset post?
- java - Java中的酒店管理系统设计
- apache-spark - 在 Spring Cloud 数据流中启动 Spark 作业