Как указано в комментарии к OP, автогенерация образцов является частью пакета страниц справки, а не интерфейсом ApiExplorer.
Для вопроса № 1 вы хотите определить примеры для составных объектов, где бы они ни использовались. Вы делаете это с помощью метода SetSampleObjects в настройках страниц справки. Например, это от моего метода HelpPageConfig.Register:
config.SetSampleObjects(new Dictionary<Type, object>
{
{typeof(CompositeType1), ModelExamples.GenerateExample<CompositeType1>()},
{typeof(CompositeType2), ModelExamples.GenerateExample<CompositeType2>()},
{typeof(CompositeType3), ModelExamples.GenerateExample<CompositeType3>()},
});
где ModelExamples.GenerateExample статический метод/класс я использую для создания примера объектов указанного типа, сохраняя этот раздел чистым и лаконичным. Вышеприведенная документация поможет вам использовать созданные вами примеры для возвращаемых типов CompositeType1, CompositeType2 и CompositeType3.
Это приводит нас к вопросу № 2. Я предполагаю, что вы говорите о типах возвратных, состоящих из нескольких типов композитных, таких как:
List<CompositeType1>
или
Tuple<CompositeType1,CompositeType2>
Это не достаточно, чтобы иметь сформированные модели, как описано выше, так как логика Помощь страниц только проверяет тип возврата в целом, прежде чем принимать решение о том, использовать модель или создать общий пример. Так что вам нужно добавить записи, как это:
config.SetSampleObjects(new Dictionary<Type, object>
{
{
typeof(List<CompositeType1>),
ModelExamples.GenerateExample<List<CompositeType1>>()
},
{
typeof(Tuple<CompositeType1,CompositeType2>),
ModelExamples.GenerateExample<Tuple<CompositeType1,CompositeType2>>()
},
});
Теперь, если вы используете HttpResponseMessage для любых типов возврата, что, когда вы используете config.SetActualResponseType(), как это:
config.SetActualResponseType(
typeof(List<CompositeType1>),
"Foo",
"ApiMethodA");
config.SetActualResponseType(
typeof(Tuple<CompositeType1,CompositeType2>),
"Bar",
"ApiMethodB");
TL; DR/Заключение: Комбинация config.SetSampleObjects и config.SetActualResponseType позволит вам настроить, какие объекты объектов выглядят в автогенерированной документации справки в целом, и дать вам возможность указать, какой пример объектов отвечает для каждого метод должен использовать.
2016 Редактировать Ответы на комментарии.ModelExamples просто создает образцы объектов указанного типа. Это можно сделать разными способами, но это один из способов:
public static class ModelExamples
{
public static T GenerateExample<T>()
{
var retval = default(T);
if (typeof(T) == typeof(ActionResult))
{
var value = ActionResult.Success;
retval = (T)(object)value;
}
// ... whatever other types you handle go here ...
return retval;
}
}
ApiExplorer не генерирует образцы, но у pacakge HelpPage есть код, который его генерирует. Также 'SetActualResponseType' полезен в сценариях, если, скажем, у вас есть тип возврата, например, HttpResponseMessage. Поскольку это маскирует фактический тип возвращаемого значения, который вы возвращаете, 'SetActualResponseType' направляет генератор образца HelpPage, чтобы узнать тип и сгенерировать образцы для него. Вам не нужно использовать 'SetActualResponseType', если ваше действие возвращает тип' SomeType'. Что касается 'получает 2 составных типа': веб-API позволяет только одному параметру прийти из тела, так что вы можете уточнить? –