【发布时间】:2018-08-15 20:18:09
【问题描述】:
我们定义了一个 Get 方法,它接受一长串可空类型作为参数。比如:
[Route("api/person/get")]
public IEnumerable<Person> Get(int? age = null, string name = null, bool? isDeceased = null)
{
...
}
这里的想法是所有输入参数都可以为空。它们要么提供参数值,要么不提供。如果他们这样做,我们将使用它来过滤他们的结果。这消除了客户端构造 JSON 对象并将其传入的需要。
问题 1:这是个好主意吗?
问题 2 是我们不希望他们通过“ABC”作为年龄。如果有,Age 参数将被填充为 null。这并不理想。相反,我们想抛出一个适当的异常。
如果看到很多关于定义 ValidateModelAttribute 并用它装饰我的 web api 方法的帖子(例如https://www.jerriepelser.com/blog/validation-response-aspnet-core-webapi/)。我的问题是,如果任何可空参数实际上为空,则 ModelState.IsValid 为假。因此,除非它们为每个参数提供一个参数(我们的真实方法有 67 个),否则 ModelState.isValid 将为 false。
提前感谢您的帮助。
亚伦
【问题讨论】:
-
在您的 Person 模型中,您设置属性的类型并使它们可以为空。如果属性类型正确,则模型状态将有效。
-
谢谢,但它没有回答我的第一个问题。如果我传入模型对象,您的建议会起作用。但我传递了一个原语列表。
标签: c# asp.net-web-api model-binding