Привязка параметров WebApi

У меня есть webapi, который клиенты используют для интеграции. Мы используем параметры FromUri и FromBody, которые принимают сложные объекты

На FromUri у меня есть пользовательское связующее, которое позволяет клиентам отправлять данные с альтернативными именами. Так, например, они отправили бы FN=Bob в строке запроса, и это сопоставило бы свойству FirstName в сложном объекте. (реализовано таким образом: атрибут связывания псевдонима), здесь используется настраиваемое связывание модели, как показано ниже. [FromUri(BinderType = typeof(CustomAliasModelBinder))]

Теперь моя проблема связана с параметром FromBody. Есть ли способ использовать привязку пользовательской модели в атрибуте FromBody? Я пытался использовать [ModelBinder(typeof(CustomAliasModelBinder))] и все виды, чтобы связать его.

Если я отправляю полное имя для каждого поля (таким образом, отправляя firstname=Bob вместо FN=Bob), все работает, как и ожидалось, используя стандартный [FromBody], но мне действительно нужно, чтобы он проходил через пользовательское связующее. Я пытался получить провайдеров значений и RouteData, но у меня ничего не получится, поскольку провайдер значений всегда нулевой. (пример ниже)

foreach (var property in bindingContext.PropertyMetadata)
        {
            var valueProvider = bindingContext.ValueProvider.GetValue(property.Key);
            if (valueProvider != null)
            {
                var value = valueProvider.ConvertTo(property.Value.ModelType);
                var pInfo = bindingContext.ModelType.GetProperty(property.Key);
                pInfo.SetValue(model, value, new object[] { });
            }
        }

Любая помощь или указатели будут высоко оценены.

0 ответов

Другие вопросы по тегам