【发布时间】:2020-07-13 00:35:04
【问题描述】:
我正在使用 ASP.NET Core Web API (v3.1) 实现 REST API。目前,当通过 URL 中的查询字符串传递时,我不确定如何区分“未定义”值和“空”值。
例如,假设 API 管理用户,所有用户都有名字和姓氏。此外,所有用户都可能有一个中间名。
REST API 允许像这样查询这些用户:
GET api/user?lastName=doe
(这将返回姓氏“Doe”的用户资源集合)。相关的控制器类可能如下所示:
[HttpGet]
public IActionResult GetUsers(string firstName, string lastName, string middleName)
{
// Search database for users
// Ignore firstName and middleName, because they are null
}
当查询包含中间名时,我的问题出现了:
GET api/user?middleName=null&firstName=john
此查询(其中middleName 明确设置为null)应返回名字为“John”且没有中间名的用户。对比请求
GET api/user?firstName=john
(其中middleName 是undefined)应该返回所有名字为“John”的用户,无论他们是否有中间名。
在这两种情况下,我的控制器方法中的middleName 参数都设置为null。如何区分控制器中的这些查询?
编辑:
我的示例具有误导性,并且表现不如我预期,因为
GET api/user?middleName=null&firstName=john
将middleName 设置为字符串值"null" 而不是null(就像什么都没有)。
我仍然想让客户端搜索没有中间名的用户(中间名的数据库值为 NULL)。这如何通过 URL 传递并由控制器进一步处理?
【问题讨论】:
-
在查询
api/user?middleName=null&firstName=john中,null是一个字符串。所以,middleName不为空,它有一个值,而该值为null。 -
@Tân 你的意思是
"null"? -
是的。我只是在我的本地主机上尝试一下。
-
你是对的,在
api/user?middleName=null&firstName=john中middleName的值是"null"。因此,在我的控制器内部,我是否应该将 C#null视为“未定义”,将特定字符串(如"null")或 URLEncoded NUL 值 (%00)(如建议的 here)视为 C#null。这被认为是常见做法还是良好做法? -
如果我孩子的中间名是“null”怎么办?
标签: c# asp.net rest asp.net-core asp.net-web-api