Не удалось создать образец для типа носителя "application/x-www-form-urlencoded"
Недавно я начал создавать веб-API ASP.net
По какой-то причине я продолжаю получать эту ошибку при просмотре автоматической сгенерированной справочной документации:
![enter image description here]()
Это для метода POST
Образцы отображаются отлично для приложения /json и application/xml
Я не совсем уверен, но приложение /-x-www-form-urlencoded продолжает показывать
Я искал ошибку довольно много, но не могу найти, что может быть причиной этого
Я действительно ценю любую помощь, которая может быть предоставлена, также, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.
Ответы
Ответ 1
Это ожидаемое поведение. Генерация образца HelpPage использует фактические форматирующие элементы, присутствующие в HttpConfiguration, для "записи" образцов объектов. FormUrlEncodedMediaTypeFormatter не может "писать" любой тип, поэтому HelpPage не может сгенерировать образцы для него.
В качестве обходного пути вы можете явно предоставить образец для определенного типа (как показано в комментированном коде Areas\HelpPage\App_Start\HelpPageConfig.cs).
config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable<string>));
Ответ 2
Ответ помог мне, но мне стало скучно писать пример для каждого типа, о котором система не знала... что я в итоге сделал, это
Type[] types = { typeof(MyType), typeof(AnotherType), *add more here* };
foreach(Type t in types)
{
List<string> propExample = new List<string>();
foreach(var p in t.GetProperties())
{
propExample.Add(p.Name + "=value");
}
config.SetSampleForType(string.Join("&", propExample), new MediaTypeHeaderValue("application/x-www-form-urlencoded"), t);
}
Кто-то может стать умным и расширить его, чтобы он помещал значения по умолчанию в зависимости от типа свойства, но этого было достаточно для моих целей.