如何解决.Net Core 3.1 Web API 中的可空列表参数
嗨,我的 web api 中有以下路由:
[Route("Resource/")]
[HttpGet]
public IActionResult Get([FromQuery] IEnumerable<string> filterItems = null)
{
}
在 .Net Framework 4.8 中,每当我在不指定任何 filterItems
的情况下调用它时,它都会将 IEnumerable
默认为 null
,这是我正在寻找的行为。
迁移到 .Net Core 3.1 后,我现在得到一个空列表。
有人知道我如何将可空列表默认为 null(= null
可用于任何其他类型,但列表似乎有问题)?
解决方法
您可以尝试使用自定义模型绑定。这是一个演示: 行动:
[Route("Resource/")]
[HttpGet]
public IActionResult Get([ModelBinder(typeof(CustomBinder))]IEnumerable<string> filterItems)
{
}
自定义活页夹:
public class CustomBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
List<string> model=new List<string>();
var l = bindingContext.ValueProvider.GetValue("filterItems[0]").FirstValue;
if (l != null)
{
int i = 0;
while (bindingContext.ValueProvider.GetValue("filterItems[" + i + "]").FirstValue != null)
{
model.Add(bindingContext.ValueProvider.GetValue("filterItems[" + i + "]").FirstValue);
i++;
}
bindingContext.Result = ModelBindingResult.Success(model);
}
else
{
bindingContext.Result = ModelBindingResult.Success(null);
}
return Task.CompletedTask;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。