2013-04-02 7 views
26

Recentemente ho iniziato la creazione di un Web API ASP.netImpossibile generare il campione per tipo di supporto 'application/x-www-form-urlencoded'

Per qualche ragione Continuo a ricevere questo errore quando si visualizza l'aiuto generato automaticamente documentazione:

enter image description here

Questo è un metodo POST

campioni mostrano sull'indennità per l'applicazione/jSON e application/xml

Non sono del tutto sicuro, ma l'applicazione/-x-www-form-urlencoded continua a mostrare fino

Googled l'errore un po ', ma non riesco a trovare ciò che potrebbe causare questo

Apprezzo veramente qualsiasi aiuto che possa essere fornito, per favore fatemi sapere se avete domande.

risposta

18

Questo è un comportamento previsto. La generazione di esempi di HelpPage utilizza i formattatori effettivi presenti in HttpConfiguration per "scrivere" gli oggetti di esempio. FormUrlEncodedMediaTypeFormatter non può 'scrivere' alcun tipo, quindi HelpPage non può generare esempi per questo. Come soluzione alternativa, è possibile fornire esplicitamente un esempio per un tipo particolare (come illustrato nel codice commentato Aree \ HelpPage \ App_Start \ HelpPageConfig.cs).

config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable<string>)); 
+0

Stavo iniziando a sospettare che si trattasse di un comportamento previsto. Grazie per le informazioni. – 99823

+5

Se me lo chiedessi, è un comportamento totalmente inaspettato. Se la pagina di aiuto non può produrre quegli esempi perché mostrare questo tipo di richieste? C'è un modo per disabilitarlo? –

+4

L'impostazione 'debug =" false "' nel tuo web.config impedirà la visualizzazione dell'errore e mostra "Sample not available." anziché. – DigitalDan

4

La risposta mi ha aiutato, ma mi sono stufato di scrivere un esempio per ogni tipo che il sistema non ne sapeva nulla ... quello che ho finito per fare è questo

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);    
} 

Qualcuno potrebbe diventa intelligente ed estendilo in modo che inserisca valori predefiniti in base al tipo di proprietà, ma questo è stato sufficiente per i miei scopi.

Problemi correlati