5. WCF Web Api - consuming simple Get service

Coś na ząb ;) Skonsumujmy prosty serwis Web Api Poprzednio:
Rest = zasób + reprezentacja.
Ostatnio stworzyłam zasób, ale nie było mowy o reprezentacji.
Kiedy próbowałam napisać coś restful w WCFie irytowało mnie że w pewnym momencie trzeba było podać JSON czy XML. Być może wtedy nie wnikałam wystarczająco głęboko ;)
W Web Api nic żeśmy nie określali a przeglądarka od razu potrafiła odczytać XML.
Posługując się Fiddlerem łatwo jest pokazać jak uzyskać XML albo JSONa.
XML (domyślnie): Wynik:
JSON - wystarczy podać Accept: application/json aby dostać wyniki w formacie Json I to jest to co dostajemy z pudełka - o ile nie mamy żadnych bardziej skomplikowanych danych jak choćby obrazków (to potem).

Web Api udostępnia również klasę klienta rest: HttpClient
Najprostszy przypadek Xml:
HttpClient httpClient = new HttpClient();
HttpResponseMessage res = httpClient.Get("http://localhost/WebApiTests/api/contacts");
if (res.StatusCode == System.Net.HttpStatusCode.OK)
{
     textBox1.Text += res.Content.ReadAsString();
     //jakoś wole TextBoxy w WinFormsach niż aplikacje konsolowe
}
else
{
     // w razie niepowodzenia wypisz tylko status 
     textBox1.Text += res.StatusCode.ToString();
}
Output:
 <?xml version= "1.0 " encoding= "utf-8 "?> 
 <ArrayOfContact> 
   <Contact> 
     <ContactId> 1</ContactId> 
     <Name> Glenn Block</Name> 
   </Contact> 
   <Contact> 
     <ContactId> 2</ContactId> 
     <Name> Howard Dierking</Name> 
   </Contact> 
 </ArrayOfContact>
 
Z Jsonem jest troszkę trudniej bo trzeba przekazać informację że chcemy jsona do wywołania serwisu.
HttpClient httpClient = new HttpClient();

var request = new HttpRequestMessage()
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("http://localhost/WebApiTests/api/contacts")
};
//Dodajemy dokładnie to samo co w Fiddlerze - "Accept"
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage responseJason = null;
responseJason = httpClient.Send(request, HttpCompletionOption.ResponseHeadersRead);

if (responseJason != null)
{
    if (responseJason.StatusCode == System.Net.HttpStatusCode.OK)
    {
        textBox1.Text += responseJason.Content.ReadAsString();
    }
    else
    {
        textBox1.Text += responseJason.StatusCode.ToString();
    }
}
/*Output:
 [{"ContactId":1,"Name":"Glenn Block"},{"ContactId":2,"Name":"Howard Dierking"}]
 */

Komentarze

Popularne posty