2012-06-14 8 views
5

Ho un metodo POST su uno dei miei regolatori di API che accetta un singolo valore stringa:Come si associa un semplice valore POST in ASP.NET WebAPI RC?

public string Post([FromBody] string foo) { 
    return(fooOracle.ValidateFoo(foo) ? "success" : "failure"); 
} 

sto postando questo con il corpo della richiesta POST come:

foo=123412341234 

(cioè è un normale POST HTTP che puoi avviare inviando un modulo browser e utilizzando un client HTTP)

Nella versione candidata di WebAPI, questo ha smesso di funzionare silenziosamente - semplicemente non si lega più a foo. Per ottenere il codice di lavoro, ho dovuto sostituire il metodo con questo:

public string Post(FormDataCollection form) { 
    var foo = form.Get("foo"); 
    return(fooOracle.ValidateFoo(foo) ? "success" : "failure"); 
} 

Questo funziona, ma è un pò disordinato e coinvolge un po 'più l'impianto idraulico per testare rispetto alla versione precedente.

Ho perso qualche cambiamento sottile o la sintassi del binding [FromBody] è stata deprecata a favore di questa sintassi di collegamento piuttosto dettagliata? L'attributo è ancora lì, ma in realtà non è chiaro ciò che effettivamente fa nella versione RC.

+0

Ha chiesto la tua domanda qui: http://aspnetwebstack.codeplex.com/discussions/359687 – Aliostad

risposta

1

In realtà c'è un cambiamento sottile che non può gestire input come 'foo = 123412341234' ma gestirà '= 123412341234' come input. Puoi fare in modo che il client lo invii come dopo?

In caso contrario, è possibile creare una classe wrapper come di seguito e fare in modo che l'azione preveda stringwrapper come parametro anziché come String.

Classe StringWrapper {stringa pubblica Foo {get; set;}}

Problemi correlati