2011-10-26 13 views
44

La API que intento llamar requiere que haga una POST pero con un cuerpo vacío. Soy nuevo en el uso de WCF Web API HttpClient y parece que no puedo encontrar el código de escritura que haría una publicación con un cuerpo vacío. Encuentro referencias a algún método HttpContent.CreateEmpty(), pero no creo que sea para el código HttpClient de la API web ya que parece que no puedo encontrar ese método.Publicar un cuerpo vacío en la API REST a través de HttpClient

+0

HttpContent.CreateEmpty era del antiguo prototipo HttpClient que formaba parte del kit REST Starter. Desafortunadamente no hay un equivalente en el nuevo HttpClient. –

Respuesta

40

Uso StringContent o ObjectContent que se derivan de HttpContent o puede utilizar como nullHttpContent (ver this comment).

+2

Usando StringContent con una cadena vacía trabajada. ¡Gracias! –

+0

Parece que esto es solo en .NET Framework 4.5? http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent(v=VS.110).aspx – dan

+0

Se enviará con WCF Web API pero creo que algunas de las "partes buenas" lo convertirá en el marco mismo. –

-4

Creo que lo hace automágicamente si su método web no tiene parámetros o todos encajan en la plantilla de URL.

Por ejemplo esta declaración envía cuerpo vacío:

[OperationContract] 
    [WebGet(UriTemplate = "mykewlservice/{emailAddress}", 
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped)] 
    void GetStatus(string emailAddress, out long statusMask); 
+0

Estoy tratando de ENVIAR un cuerpo vacío. El método HttpClient.Post() requiere un URI y un objeto HttpContent. No soy lo que debo pasar como HttpContent cuando no quiero enviar nada. –

+0

Entonces no estás usando WCF. Eso es aún más fácil: ... HttpWebRequest request = (HttpWebRequest) WebRequest.Create ("http: // ..."); request.Method = "POST"; HttpWebResponse respose = (HttpWebResponse) request.GetResponse(); ... da como resultado la respuesta –

+1

Estoy usando HttpClient, no HttpWebRequest. Usar StringContent con una cadena vacía trabajada. –

27

hizo esto antes, si prefieres algo más sencillo:

Task<HttpResponseMessage> task = client.PostAsync(url, null); 
+0

Esto es más limpio que la respuesta aceptada, y debe votarse. –

2

han encontrado que:

tarea Tarea = client.PostAsync (url, null);

Agrega nulo al cuerpo de la solicitud, que falló en WSO2. Reemplazado por:

Task task = client.PostAsync (url, new {});

Y trabajado.

Cuestiones relacionadas