c# - .Net Core 3.1 Web API 中的可空列表参数
问题描述
嗨,我的网络 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;
}
}
推荐阅读
- python - 如何以编程方式运行/调用烧瓶 cli 命令?
- angular - PrimeNG 复选框默认不被选中
- macros - 如何使来自外部 crate 的宏中的 Rust 警告静音?
- excel - 集中维护excel公式
- graph - Spring Data ArangoDB 直接使用注解获取父级
- azure - GetTwinAsync() 抛出序列化转换异常-> DatetimeOffset
- jquery - 根据 2 个属性查找元素
- node.js - Google AppEngine 每 10 分钟启动一次应用程序
- android - 如何在意图“Intent.EXTRA_ALLOW_MULTIPLE”上设置最大文件选择计数。用户最多可以选择一定的限制?
- javascript - crypto.createCipheriv 中的密钥长度无效