.net core 是否可以控制.NET核心数据批注的响应?
我用.net核心数据注释装饰了一个POCO.net core 是否可以控制.NET核心数据批注的响应?,.net-core,data-annotations,.net Core,Data Annotations,我用.net核心数据注释装饰了一个POCO public class Foo { [Required] [StringLength(100, MinimumLength = 1)] public String Name { get;set;} } 当我使用无效数据调用API控制器时,这些数据验证规则将返回HTTP 400。有效载荷看起来大致如下: { "name": [ "The Name field is required." ]
public class Foo
{
[Required]
[StringLength(100, MinimumLength = 1)]
public String Name { get;set;}
}
当我使用无效数据调用API控制器时,这些数据验证规则将返回HTTP 400。有效载荷看起来大致如下:
{
"name": [
"The Name field is required."
]
}
我的两个问题:
{
"reason":"Invalid request",
"errorCode":"BadFooDetails",
"data" : {
"name": [
"The Name field is required." ]
}
}
这样做的主要原因是要有一个一致的结构化错误响应负载 如果我理解正确,您正在查找数据注释的属性
public class Foo
{
[Required]
[StringLength(100, MinimumLength = 1)]
public String Name { get;set;}
}
在你的情况下,它应该看起来像
[Required(ErrorMessage = "My custom error message")]
[StringLength(100, MinimumLength = 1)]
public string Name { get; set; }
另一个选择(我建议)是使用图书馆。非常灵活。我没有注意到的是ApicController和Controller(MVC)之间的细微差别。对于ApiController,它自动执行验证,不像MVC控制器(或简单的控制器基类)那样给开发人员提供验证的机会.为了详细说明,除了输入验证之外,我们还有其他处理,它使用这个“外部构造”来提供错误状态方面的一致性信封。在数据属性中传输详细信息。唯一的建议是使用中间件重写响应,但感觉我们缺少了一些控制。