Получить динамический c объект из параметров запроса - PullRequest
0 голосов
/ 10 февраля 2020

Есть ли способ получить динамический c объект из параметров запроса в действии контроллера ASP. NET Core WebAPI?

При попытке выполнить следующее я получаю queries как пустой объект

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

1 Ответ

0 голосов
/ 14 февраля 2020

Вот обходной путь настройки связывателя модели для привязки строки запроса к типу словаря:

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

...