【发布时间】:2018-05-03 19:31:25
【问题描述】:
我在 Web API 2.2 项目中有一个 api/v1/users/search uri。此 uri 接受 UserSearchRequest 对象。这是一个示例:
{
"DomainName":"ad.corp.domain",
"NetworkUserId":"jsmith2",
"FirstName":"John",
"LastName":"Smith"
}
后端搜索逻辑将附加所有提供的请求参数值以过滤返回的用户集。否则,一个空的请求对象将导致所有用户都被返回。但是,如果客户端通过如下请求,则将返回所有用户:
{
"UserName":"jsmith2"
}
在上面的示例中,错误地使用了无效的 UserName 属性而不是 NetworkUserId。但是,由于没有提供有效的搜索条件属性值,它只是忽略了附加属性并返回了所有用户,而不是 Web API 返回错误。
验证传入请求的正确方法是什么,以便如果提供了无效的属性名称,那么 Web API 将返回 404 BadRequest,并且最好指示无效的属性名称?
【问题讨论】:
-
您可能会考虑要求该字段并使用
*之类的东西来表示“全部”。我看不到任何代码,但我可以推断问题不在于发送了无效属性,而是反序列化为该属性创建了一个带有null的对象。我认为你的意思是400,而不是404。 -
不,有 10 个搜索属性,它们都不是必需的
-
你不能同时拥有它。
标签: c# asp.net .net asp.net-web-api asp.net-web-api2