首页 > 解决方案 > .Net Core 3.1 Web API 中的可空列表参数

问题描述

嗨,我的网络 api 中有以下路线:

[Route("Resource/")]
[HttpGet]
public IActionResult Get([FromQuery] IEnumerable<string> filterItems = null)
{
}

在 .Net Framework 4.8 中,每当我在没有指定任何内容的情况下调用filterItems它时,它都会默认为IEnumerablenull正在寻找的行为。迁移到 .Net Core 3.1 后,我现在得到一个空列表。

任何人都知道如何将可空列表默认​​为 null (= null适用于任何其他类型,但列表似乎有问题)?

标签: c#parametersasp.net-core-webapinullable.net-core-3.1

解决方案


您可以尝试使用自定义模型绑定。这是一个演示:操作:

[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;
        }
    }

结果: 在此处输入图像描述


推荐阅读