【发布时间】:2020-08-12 07:53:13
【问题描述】:
我的控制器中有这个方法需要接收过滤表达式列表,因此我可以过滤 DynamoDB 表,但要过滤的值可以是字符串、数字、布尔值等... 所以我使用了“System.Object”类型的属性。但似乎控制器无法将 FromQuery 参数绑定到类型“System.Object”对象。
[HttpGet]
public IActionResult Get(
[FromRoute]string name,
[FromQuery]FilterExpression[] filters
)
{
return Ok(m_attributeService.GetByAttributeName(name, filters));
}
FilterExpression 类
public class FilterExpression
{
public FilterExpression(){}
public FilterExpression(
string field,
string comparisonOperator,
dynamic values
)
{
Field = field;
ComparisonOperator = comparisonOperator;
Values = values;
}
public string Field { get;set; }
public string ComparisonOperator { get;set; }
public object Values { get;set; }
}
但每次我做任何请求时,Values 属性总是 null。 我想知道在我的方法中接收不同数据类型的解决方法。
【问题讨论】:
-
这是因为在查询中一切都是字符串,直到它被框架根据您指定的类型强制转换。框架如何自动区分
?values=1&values=true&values=foo字符串中的类型?仅仅因为它说 1 或 true 并不意味着您不希望将它们作为字符串。您需要在某处指定自定义逻辑,说明它是否是数字,转换它,如果它是一个布尔转换它等等。无论是通过比较字符串还是使用int.TryParse/bool.TryParse都取决于您。 -
如果只需要一个端点,我会接受 Values 作为字符串列表/数组并使用自定义函数强制它。如果适用于许多人,一些自定义中间件可能会更好。
标签: c# asp.net-core web amazon-dynamodb