Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core 是否可以控制.NET核心数据批注的响应?_.net Core_Data Annotations - Fatal编程技术网

.net core 是否可以控制.NET核心数据批注的响应?

.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." ]

我用.net核心数据注释装饰了一个POCO

public class Foo
{
    [Required]
    [StringLength(100, MinimumLength = 1)]
    public String Name { get;set;}
}
当我使用无效数据调用API控制器时,这些数据验证规则将返回HTTP 400。有效载荷看起来大致如下:

{
    "name": [
        "The Name field is required."
      ]
}
我的两个问题:

  • 我已经看到很多文档提到了moderate.IsValid,在我的例子中,控制器甚至没有被输入,也没有添加任何自定义操作过滤器

  • 但是,是否可以控制/配置有效负载响应

  • 我想返回更多的结构化响应

    {
        "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控制器(或简单的控制器基类)那样给开发人员提供验证的机会.

    为了详细说明,除了输入验证之外,我们还有其他处理,它使用这个“外部构造”来提供错误状态方面的一致性信封。在数据属性中传输详细信息。唯一的建议是使用中间件重写响应,但感觉我们缺少了一些控制。