首页 > 解决方案 > 从查询参数中获取动态对象

问题描述

有没有办法从 ASP.NET Core WebAPI 控制器操作中的查询参数中获取动态对象?

当我尝试以下操作时,我得到queries一个空对象

public object Action([FromQuery] dynamic queries)
{
    ...
}

标签: c#asp.net-coreasp.net-core-webapi

解决方案


这是自定义模型绑定器以将查询字符串绑定到 Dictionary 类型的解决方法:

动态模型绑定器

public class DynamicModelBinder:IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        if (bindingContext == null)
            throw new ArgumentNullException(nameof(bindingContext));

        var result = new Dictionary<string, dynamic> { };
        var query = bindingContext.HttpContext.Request.Query;
        if (query == null)
        {
            bindingContext.ModelState.AddModelError("QueryString", "The data is null");
            return Task.CompletedTask;
        }

        foreach (var k in query.Keys)
        {
            StringValues v = string.Empty;
            var flag = query.TryGetValue(k, out v);
            if (flag)
            {
                if (v.Count > 1)
                {
                    result.Add(k, v);
                }
                else { 
                result.Add(k, v[0]);

                }
            }
        }

        bindingContext.Result = ModelBindingResult.Success(result);
        return Task.CompletedTask;
    }
}

控制器

public object Action([ModelBinder(BinderType = typeof(DynamicModelBinder))]dynamic queries)
    {
        return queries;
    }

结果 在此处输入图像描述


推荐阅读