从查询参数获取动态对象

时间:2020-02-09 22:14:33

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

是否可以通过ASP.NET Core WebAPI控制器操作中的查询参数获取动态对象?

尝试以下操作时,我得到queries作为空对象

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

1 个答案:

答案 0 :(得分:0)

这是自定义模型绑定程序以将查询字符串绑定到字典类型的一种解决方法:

DynamicModelBinder

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

结果 enter image description here