数组在 ASP.NET 6 中创建验证错误
Array creates validation error in ASP.NET 6
我在将我的 WebApi 项目更改为使用 .NET 6 而不是 .NET Core 3.1 作为我的数组查询参数类型时发现验证错误。以前他们没有 return 验证错误,但在 6.0 中他们有。
我有以下 class 查询:
public class Query
{
public List<string> Id { get; set; }
}
以及具有以下端点的控制器:
[HttpGet()]
public IActionResult Get([FromQuery] Test2 test)
{
return Ok()
}
当我发送不带任何查询参数的查询时,我收到一个 BadRequest,在使用 .NET 6 实现时将字段 ID 标记为必需。当使用 .NET Core 3.1 (或 5.0),方法正确执行。
为了重现,我已经使用 .NET Core 3.1、5.0 和 6.0 创建了一个 ASP.NET Core WebApi 项目,并添加了一个控制器端点,其中包含一个包含字符串数组的查询实体,如上例所示,没有任何其他变化。
坦率地说,我对此有点困惑。我尝试手动为 System.ComponentModel 执行验证程序,但这产生了预期的结果(没有错误)。我没有在脚手架上添加任何可以解释这种行为的东西,它基本上是相同的。我在 .NET 6.0 的重大更改列表中也没有发现任何提及。
向 Id 添加自定义验证属性(“NotRequired”)属性 修复了该行为,但是我更希望能够保持查询模型原样,因为它以前可以工作,而 ComponentModel 不会'显示任何错误。
来自docs:
The validation system treats non-nullable parameters or bound properties as if they had a [Required(AllowEmptyStrings = true)]
attribute. By enabling Nullable contexts, MVC implicitly starts validating non-nullable properties or parameters as if they had been attributed with the [Required(AllowEmptyStrings = true)]
attribute.
您可以使 属性 成为可为空的引用类型,这样它会使 Id
成为可选的:
public class Query
{
public List<string>? Id { get; set; }
}
或者您可以完全禁用可为 null 的上下文分析,这也会恢复到旧行为(所以我个人建议不要这样做)。
我在将我的 WebApi 项目更改为使用 .NET 6 而不是 .NET Core 3.1 作为我的数组查询参数类型时发现验证错误。以前他们没有 return 验证错误,但在 6.0 中他们有。
我有以下 class 查询:
public class Query
{
public List<string> Id { get; set; }
}
以及具有以下端点的控制器:
[HttpGet()]
public IActionResult Get([FromQuery] Test2 test)
{
return Ok()
}
当我发送不带任何查询参数的查询时,我收到一个 BadRequest,在使用 .NET 6 实现时将字段 ID 标记为必需。当使用 .NET Core 3.1 (或 5.0),方法正确执行。
为了重现,我已经使用 .NET Core 3.1、5.0 和 6.0 创建了一个 ASP.NET Core WebApi 项目,并添加了一个控制器端点,其中包含一个包含字符串数组的查询实体,如上例所示,没有任何其他变化。
坦率地说,我对此有点困惑。我尝试手动为 System.ComponentModel 执行验证程序,但这产生了预期的结果(没有错误)。我没有在脚手架上添加任何可以解释这种行为的东西,它基本上是相同的。我在 .NET 6.0 的重大更改列表中也没有发现任何提及。
向 Id 添加自定义验证属性(“NotRequired”)属性 修复了该行为,但是我更希望能够保持查询模型原样,因为它以前可以工作,而 ComponentModel 不会'显示任何错误。
来自docs:
The validation system treats non-nullable parameters or bound properties as if they had a
[Required(AllowEmptyStrings = true)]
attribute. By enabling Nullable contexts, MVC implicitly starts validating non-nullable properties or parameters as if they had been attributed with the[Required(AllowEmptyStrings = true)]
attribute.
您可以使 属性 成为可为空的引用类型,这样它会使 Id
成为可选的:
public class Query
{
public List<string>? Id { get; set; }
}
或者您可以完全禁用可为 null 的上下文分析,这也会恢复到旧行为(所以我个人建议不要这样做)。