Wie zu Lesen webapi Antworten mit HttpClient in C#

Ich ziemlich neu bin, webapi und entwickelt haben, eine kleine webapi, die hat ein paar Aktionen und gibt meine eigene Klasse namens Response.

Die Response Klasse

public class Response
{
    bool IsSuccess=false;
    string Message;
    object ResponseData;

    public Response(bool status, string message, object data)
    {
        IsSuccess = status;
        Message = message;
        ResponseData = data;
    }
}

Meine webapi mit Aktionen

[RoutePrefix("api/customer")]
public class CustomerController : ApiController
{
    static readonly ICustomerRepository repository = new CustomerRepository();

    [HttpGet, Route("GetAll")]
    public Response GetAllCustomers()
    {
        return new Response(true, "SUCCESS", repository.GetAll());
    }

    [HttpGet, Route("GetByID/{customerID}")]
    public Response GetCustomer(string customerID)
    {
        Customer customer = repository.Get(customerID);
        if (customer == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return new Response(true, "SUCCESS", customer);
        //return Request.CreateResponse(HttpStatusCode.OK, response);
    }

    [HttpGet, Route("GetByCountryName/{country}")]
    public IEnumerable<Customer> GetCustomersByCountry(string country)
    {
        return repository.GetAll().Where(
            c => string.Equals(c.Country, country, StringComparison.OrdinalIgnoreCase));
    }
}

Jetzt, wo ich geblieben bin ist, dass ich nicht weiß, wie die Antwort Lesen von Daten zurückgegeben, die von der webapi Aktionen und extrahieren von json aus meiner Antwort-Klasse. Nach dem bekommen von json wie könnte ich deserialize dass json auf die customer-Klasse.

Dies ist die Art, wie ich bin, ruft mein webapi-Funktion:

private void btnLoad_Click(object sender, EventArgs e)
{
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost:8010/");
    //Add an Accept header for JSON format.  
    //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    //List all Names.  
    HttpResponseMessage response = client.GetAsync("api/customer/GetAll").Result;  //Blocking call!  
    if (response.IsSuccessStatusCode)
    {
        Console.WriteLine("Request Message Information:- \n\n" + response.RequestMessage + "\n");
        Console.WriteLine("Response Message Header \n\n" + response.Content.Headers + "\n");
    }
    else
    {
        Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
    }
    Console.ReadLine();   
}

Bitte helfen, mich zu Sortieren, meinen code

1), Wie man die response-Klasse die webapi zurück an den client
Seite

2) Wie könnte ich das extrahieren von json-aus der Antwort-Klasse

3) Wie Deserialisieren des json, um die customer-Klasse in der client-Seite

Dank

BEARBEITEN

Verwende ich diesen code, aber immer noch ein Fehler.

    var baseAddress = "http://localhost:8010/api/customer/GetAll";
    using (var client = new HttpClient())
    {
        using (var response =  client.GetAsync(baseAddress).Result)
        {
            if (response.IsSuccessStatusCode)
            {
                var customerJsonString = await response.Content.ReadAsStringAsync();
                var cust = JsonConvert.DeserializeObject<Response>(customerJsonString);
            }
            else
            {
                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
            }
        }
    }

Ter error msg ist:

Eine Ausnahme des Typs " Newtonsoft.Json.JsonSerializationException'
aufgetreten in Newtonsoft.Json.dll wurde aber nicht behandelt werden, in Benutzer-code

Weitere Informationen: kann Nicht deserialisiert werden die aktuellen JSON-Objekt
(z.B. {"name":"Wert"}) in den Typ 'WebAPIClient.Antwort[]' da
die Art benötigt ein JSON-array (z.B. [1,2,3]) Deserialisieren
richtig.

Warum ist die Antwort, die diesen Fehler verursacht?

Siehe dotnetperls.com/httpclient für eine Probe, um den Inhalt Lesen. Serialising und deserialising können hier gefunden werden newtonsoft.com/json/help/html/serializingjson.htm
wenn ich lese, wie dieser Weg var customerJsonString = await response.Content.ReadAsStringAsync(); dann gerade dieses symbol {} gespeichert in customerJsonString variable. wo mache ich den Fehler?
Was passiert, wenn Sie öffnen Sie Ihren browser und navigieren Sie zu: localhost:8010/api/Kunden/GetAll - stellt, die Ergebnisse zurückgeben? (D. H. die Erprobung der api ohne Ihre client-code).
Ich bin mir nicht ganz sicher, warum Sie erstellt haben, eine Response Klasse. Aus der API sollten Sie nur in der Lage sein, das Objekt zurückzugeben (oder in diesem Fall die Liste der Objekte) aus Ihrem repository. Auf dem client, der Sie dann gerade benötigen, um die Zeichenfolge der Antwort (JSON) über response.Content.ReadAsStringAsync(); und dann können Sie so etwas wie JsonConvert zu Deserialisieren, die Json-Zeichenfolge zu einer C# - Objekt. Sie müssten in die gleiche Klasse in der client um zu Deserialisieren zurück - vielleicht erzeugt eine shared-library, oder etwas, so können Sie importieren diese in beiden Projekten (nur ein Vorschlag)

InformationsquelleAutor Monojit Sarkar | 2016-08-26

Schreibe einen Kommentar