【问题标题】:Get dynamic object from query parameters从查询参数中获取动态对象
【发布时间】:2020-02-14 16:26:26
【问题描述】:

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

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

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

【问题讨论】:

  • 你如何调用端点?在这里提出了类似的问题:stackoverflow.com/q/33018893/5803406
  • 看起来像是指环王的方法(一种统治所有人的方法)。 FWIW,即使你能做到这一点,你可能也不应该这样做。

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


【解决方案1】:

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

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

结果

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2021-01-15
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2017-05-07
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多