首页 > 解决方案 > 接受 Guid 集合的 API 控制器 - 未传递参数值时收到空 Guid

问题描述

我有一个 ASP.NET API 控制器,它看起来像这样:

 [HttpGet, Route("endpoint")]
 public async Task GetValues([FromUri] IReadOnlyCollection<Guid> ids)

当我使用此 URI 调用此端点时:

'http://localhost:56132/api/controllers/endpoint?ids='

然后调试收到的集合,它实际上包含一个空条目Guid。在这种情况下,我预计该集合是空的。为什么它会这样工作?有什么我可以做的,它不会将这个空添加Guid到集合中吗?

标签: c#asp.net

解决方案


ASP.NET 正在按照您所说的那样做:您提供了一个没有价值的元素。您已将集合指定为<Guid>,一个不能为 null 的值类型,因此您将获得单个元素的默认值,即 Guid.Empty

如果您提供两个没有值的参数,您将在集合中获得两个元素,其中 Guid.Empty 作为值:

localhost:56132/api/controllers/endpoint?ids=&ids=

在此处输入图像描述

有什么我可以做的,它不会将这个空的 Guid 添加到集合中吗?

如果您想要一个没有元素的集合,请不指定任何元素:

localhost:56132/api/controllers/endpoint?

在此处输入图像描述

如果您想要一个包含 1 个空值的集合,请使用可为空的类型而不是Guid,例如Guid?

在此处输入图像描述


推荐阅读