2016-08-25 5 views
-1

In meiner C# -App brauche ich 2 verschiedene Teile:
1) Eine Klassenbibliothek, die HttpClient umschließt, nimmt Parameter wie URI und ein JSON-Objekt an POSTED und ruft die POST-Methode auf einer Instanz von Httpclient:Wie verwendet man HttpClient korrekt als Klassenbibliothek?

static async Task CreateCustomer() 
     { 
      using (var client = new HttpClient()) 
      { 
       client.BaseAddress = new Uri("http://10.211.55.2:8080/"); 
       client.DefaultRequestHeaders.Accept.Clear(); 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
       client.DefaultRequestHeaders.Add("Accept", "application/json"); 

       var customer = new Customer() { Name = "Gizmo", Address = "123 Widget lane" }; 
       var response = await client.PostAsJsonAsync("/api/customer", customer); 
       var p = response; 
      } 
     } 

2) Ein Windows-Konsole-Anwendung, die diese Klassenbibliothek importiert, und ruft diese CreateCustomer Methode, die aktuellen Parameterwerte für den URI vorbei und dem Kunden JSON-Objekt:

static async Task EnvokeCreateCustomer() 
     { 
      Customer customer = new Customer {Name="",Address="" }; 
      var URI = "http://my_api:8080/Customer"; 
      RestClient.Client restClient = new RestClient.Client(); 
      restClient.CreateCustomer(URI, customer); 
     } 

Dieser Code wird ausgeführt, aber es ist kein Ereignis, das auf meine API trifft, es durchbricht, es passiert hat und nichts tut. Das gleiche Problem mit der GET API.

Gibt es eine bewährte Möglichkeit zum Erstellen solcher Klassenbibliotheken, die von einer Konsolenanwendung aufgerufen werden können?

+3

Ihre Bibliothek 'CreateCustomer()' akzeptiert keine Parameter, wie kommen Sie dann mit Parameter? – Rahul

+0

Sie warten nicht auf die letzte Zeile, ändern Sie sie wie folgt: warten restClient.CreateCustomer (URI, Kunde); Und warten Sie auf den Anruf bei EnvokeCreateCustomer()? –

+0

@PeterBons, nur weil es async ist, schränkt es nicht ein, darauf zu warten. – Rahul

Antwort

1

Sie erwarten nicht, den Methodenaufruf:

await restClient.CreateCustomer(URI, customer); 

auf dem Anwendungshost Je dies kann oder kann nicht eine bemerkbar Unterschied machen. In einer Konsolenanwendung, wo die Anwendung einfach ihre Sache tun und sofort beenden kann, macht es einen enormen Unterschied.

Ganz zu schweigen von irgendwelchen Fehlern, die im Prozess empfangen werden, können völlig unbemerkt bleiben, wenn der Anruf nicht erwartet wird. So ist es möglich, dass es ein Problem gibt und es versucht, Ihnen zu sagen, was das Problem ist, aber Ihr Code ignoriert es einfach.

Sicherlich gibt es eine Compiler-Warnung, die darauf hinweist. Ignoriere niemals Compiler-Warnungen.


Seitennotiz: Wie kompiliert dieser Code überhaupt? Dies:

restClient.CreateCustomer(URI, customer); 

kann dies nicht anrufen:

static async Task CreateCustomer() 

Wenn das, was du uns zeigen, nicht Ihre eigentliche Code ist, dann sind alle Wetten ab, so weit wie Antworten gehen.

Verwandte Themen