2013-03-04 20 views
5

Ich möchte eine Einfügung von einem entfernten Client für die ich Daten über http senden müssen.
kann ich die getPerformances() richtig verwenden, um mit einem httpClientapi/performances?date={0}MVC 4 Web Api Beitrag

ich, wenn meine postPorformances() implemntation in meinem PerformancesController corrrect fragen will, und wenn es ist, wie es von einem Client nennen?

Hier ist meine Implementierung:

public class PerformancesController : ApiController 
    { 
     // GET api/performances 
     public IEnumerable<Performance> getPerformances(DateTime date) 
     { 
      return DataProvider.Instance.getPerformances(date); 
     } 

     public HttpResponseMessage postPerformances(Performance p) 
     { 
      DataProvider.Instance.insertPerformance(p); 
      var response = Request.CreateResponse<Performance>(HttpStatusCode.Created, p); 
      return response; 
     } 
    } 
public class Performance { 
    public int Id {get;set;} 
    public DateTime Date {get;set;} 
    public decimal Value {get;set;} 
} 

ich dieses versucht haben, aber ich bin mir sicher Anmerkung:

private readonly HttpClient _client; 
    string request = String.Format("api/performances"); 
    var jsonString = "{\"Date\":" + p.Date + ",\"Value\":" + p.Value + "}"; 
    var httpContent = new StringContent(jsonString, Encoding.UTF8, "application/json"); 
    var message = await _client.PutAsync(request, httpContent); 

Antwort

10

Sie konnten die HttpClient verwenden, um dies zu rufen Methode:

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://example.com"); 
    var result = client.PostAsync("/api/performances", new 
    { 
     id = 1, 
     date = DateTime.Now, 
     value = 1.5 
    }, new JsonMediaTypeFormatter()).Result; 
    if (result.IsSuccessStatusCode) 
    { 
     Console.writeLine("Performance instance successfully sent to the API"); 
    } 
    else 
    { 
     string content = result.Content.ReadAsStringAsync().Result; 
     Console.WriteLine("oops, an error occurred, here's the raw response: {0}", content); 
    } 
} 

In diesem Beispiel verwende ich die generische Methode PostAsync<T>, die es mir erlaubt, jedes Objekt als zweiten Parameter zu senden und den Medientyp Formatierer zu wählen. Hier habe ich ein anonymes Objekt verwendet, das die gleiche Struktur wie Ihr Performance Modell auf dem Server und die JsonMediaTypeFormatter imitiert. Sie können dieses Performance Modell natürlich zwischen dem Client und dem Server freigeben, indem Sie es in ein Vertragsprojekt einfügen, sodass Änderungen auf dem Server auch automatisch auf dem Client widergespiegelt werden.

Randbemerkung: Die C# -Namenskonvention schreibt vor, dass Methodennamen mit einem Großbuchstaben beginnen sollten. So sollte getPerformances sollte GetPerformances oder noch besser Get und postPerformances sollte PostPerformances oder noch besser Post sein.

+0

Wenn der Aufruf von ap/performances viel Zeit in Anspruch nimmt, sollten Sie vor dem Anruf client.Timeout festlegen – BlackTigerX

Verwandte Themen