2011-10-26 32 views
44

Interfejs API, który próbuję wywołać, wymaga wykonania instrukcji POST, ale z pustą treścią. Jestem nowy w korzystaniu z HttpClient WCF Web API i nie mogę znaleźć kodu zapisu, który zrobiłby post z pustym ciałem. Znajduję odniesienia do niektórych metod HttpContent.CreateEmpty(), ale nie sądzę, że jest to dla kodu HttpClient Web API, ponieważ nie mogę znaleźć tej metody.Publikowanie pustego obiektu w interfejsie REST API za pośrednictwem HttpClient

+0

HttpContent.CreateEmpty pochodzi ze starego prototypu HttpClient, który był częścią zestawu startowego REST. Niestety nie ma odpowiednika w nowym HttpClient. –

Odpowiedz

40

Zastosowanie StringContent lub ObjectContent które wywodzą się z HttpContent lub użyć null jako HttpContent (patrz this comment).

+2

Praca z StringContent z pustym ciągiem zadziałała. Dzięki! –

+0

Wygląda na to, że jest to tylko w .NET Framework 4.5? http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent(v=VS.110).aspx – dan

+0

Będzie dostarczany z interfejsem API WCF Web, ale myślę, że niektóre z "dobrych części" wejdzie w ramy. –

-4

Myślę, że robi to automagicznie, jeśli twoja metoda sieciowa nie ma parametrów lub wszystkie pasują do szablonu adresu URL.

Na przykład deklaracja ta wysyła pusty ciała:

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

Próbuję wysłać puste ciało. Metoda HttpClient.Post() wymaga identyfikatora URI i obiektu HttpContent. Nie jestem tym, co przekazać jako HttpContent, gdy nie chcę niczego wysyłać. –

+0

Więc nie używasz WCF. To jeszcze łatwiejsze: ... HttpWebRequest request = (HttpWebRequest) WebRequest.Create ("http: // ..."); request.Method = "POST"; HttpWebResponse respose = (HttpWebResponse) request.GetResponse(); ... możesz uzyskać odpowiedź –

+1

Używam HttpClient, a nie HttpWebRequest. Używanie StringContent z pustym ciągiem działało. –

27

Czy to już wcześniej, po prostu keep it simple:

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

To jest czystsza niż zaakceptowana odpowiedź i powinna zostać poddana pod głosowanie. –

2

odkryli, że:

zadanie Task = client.PostAsync (url, null);

Dodaje wartość null do treści żądania, która nie powiodła się w przypadku WSO2. Zastąpiony:

Zadanie zadań = klient.PostAsync (adres URL, nowy {});

I działało.

Powiązane problemy