2012-07-26 15 views
11

Soy nuevo en WebAPI y trato de aprenderlo. Tengo un controlador WebAPI al cual intento POSTAR una cadena usando WebClient desde mi Prueba unitaria.POST una cadena para el controlador Web API en ASP.NET 4.5 y VS 2012 RC

Estoy publicando una cadena en mi WebAPI usando el siguiente código.

using (var client = new WebClient()) 
{ 
    client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 
    var result = client.UploadString(_webapiUrl, "POST", "hello"); 
} 

Aquí está mi controlador.

[HttpPost] 
public byte[] Post(string value) 
{ 
    // Do something with value 
} 

que puede golpear un punto de quiebre en mi controlador, pero no parece para publicar ningún cadena y siempre obtener el valor NULL. ¿Qué debo hacer para obtener el valor?

Gracias

Respuesta

10

Si todo lo que necesita para recibir es un valor, utilizar = antes del valor:

var result = client.UploadString(_webapiUrl, "POST", "=hello"); // NOTE '=' 
+4

Gracias, esto funcionó para mí prefijando el parámetro de acción con [FromBody]. Este es un comportamiento realmente extraño de WebAPI. – durbhakula

+0

¿Qué pasa si el valor es un objeto json? – awe

2

Aviso el valor par de claves que se forma por publicar los valores de nuevo al servidor. La clave debe ser la misma que esperas en el parámetro del método de acción. En este caso, su clave es "VALOR"

[HttpPost] 
public byte[] Post(string value) 

Utilice el siguiente código para publicar el valor.

string URI = "http://www.someurl.com/controller/action"; 
string myParamters = "value=durbhakula"; 

using (WebClient wc = new WebClient()) 
{ 
    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
    string HtmlResult = wc.UploadString(URI, myParameters); 
} 

ACTUALIZACIÓN

Doy gracias Aliostad para señalar mi error. El nombre del parámetro debe estar vacío mientras se publican los datos del formulario en la API web.

string myParamters = "=durbhakula"; 

También debe poner el atributo [FormBody] en su método de acción. El FromBody atributo indica Web API para leer el valor del cuerpo de la petición

[HttpPost] 
[ActionName("Simple")] 
public HttpResponseMessage PostSimple([FromBody] string value) 
{ 
.. 
.. 
} 

Consulte este link

+0

Esto no funcionará en la API web. http://aspnetwebstack.codeplex.com/discussions/359687 – Aliostad

+0

@Aliostad: Gracias por señalar mi error – Anand

Cuestiones relacionadas