У меня есть объект, который выглядит довольно много, как это:Сильно типизированных и произвольные свойства в Web API объекта запроса
public class MyNiceRequest
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public string SomeOptionalField { get; set; }
}
И мой контроллер выглядит следующим образом, довольно стандартная еще:
public MyNiceResponse Post(MyNiceRequest request) {
...
}
Из внешнего интерфейса вызывающего приложения я хочу включить больше полей, чем три, указанные в объекте. Эти поля генерируются во время выполнения (контролируются через интерфейс администратора), поэтому я не могу применить их к классу запросов. Тем не менее, я не нашел хороший способ получить их в контроллере.
Я могу сделать свой объект запроса (MyNiceRequest
) наследовать от Dictionary<string,string>
- тогда я получу их все, но они не будут привязаны к их соответствующим свойствам на строго типизированном классе (похоже, словарь связан перед отдых в любом используемом устройстве для связывания). Кроме того, что более важно, валидация, которая имеет решающее значение для приложения, перестает работать.
Я видел this вопрос, но это не дает мне ничего, поскольку Request.Content.Read...
-methods дает мне пустые результаты (так как это уже прочитано и привязано к модели?).
Скажем, я хочу следующие поля от переднего конца:
FirstName
(должен привязываться сильно типизированных, нигде)LastName
(должен привязываться сильно типизированных, нигде)SomeOptionalField
(должен привязываться сильно типизированных, нигде)RuntimeGenerated1
(должен закончиться в словаре)RuntimeGenerated2
(должен закончиться в словаре)
Я хочу, чтобы один из двух решений:
- Либо иметь возможность наследовать от
Dictionary<string,string>
, но пусть словарь будет связан после того, как сильно типизированные свойства, чтобы валидация do it is work - Есть отдельное свойство на
MyNiceRequest
, которое может быть чем-то вродеDictionary<string,string> TheRest { get; set; }
и привязать его к оставшимся входящим свойствам где-нибудь.
Перезапись переднего конца для передачи в поле времени генерируемых полей в виде отдельной коллекции не является вариантом.
.. и может ли это вообще быть достигнуто путем повторного использования/переупорядочения существующего материала, или мне нужно будет написать полный форматировщик форматов мультимедиа и/или связующее устройство с нуля?
Что такое ваш тип содержимого запроса? Является ли это JSON? – LostInComputer
Да. Для реального общего решения я предполагаю, что он должен обрабатывать любые прикладные медиаформаты, но для этого конкретного случая поддержка только JSON совершенно прекрасна. –