2012-06-14 9 views
5

Tengo un método POST en una de mis controladores de la API que toma un solo valor de cadena:¿Cómo puedo vincular un valor POST simple en ASP.NET WebAPI RC?

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

Quiero poner a esto con el cuerpo de la petición puesto como:

foo=123412341234 

(es decir, es un HTTP POST regular que puede iniciar enviando un formulario de navegador y utilizando un cliente HTTP)

En la versión candidata de WebAPI, esto ha dejado de funcionar silenciosamente, simplemente ya no vincula a foo. Para conseguir el funcionamiento de código, he tenido que cambiar el método con esto:

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

Este funciona, pero es un poco complicado e implica bastante más de plomería para probar que la versión anterior.

¿He perdido algún cambio sutil, o la sintaxis de enlace [FromBody] ha quedado en desuso en favor de esta sintaxis de enlace bastante verbosa? El atributo sigue ahí, pero realmente no está claro qué es lo que realmente hace en la versión RC.

+0

Haga su pregunta aquí: http://aspnetwebstack.codeplex.com/discussions/359687 – Aliostad

Respuesta

1

En realidad, hay un cambio sutil que no puede manejar entradas como 'foo = 123412341234' pero manejará '= 123412341234' como entrada. ¿Puedes hacer que el cliente lo envíe como más tarde?

De lo contrario, podría crear una clase contenedora de la siguiente manera y hacer que su acción cuente con stringwrapper como parámetro en lugar de cadena.

Clase StringWrapper {public string Foo {get; establecer;}}

Cuestiones relacionadas