2012-05-29 13 views
5

Ich versuche, zu einer Asp.Net WebAPI POST-Methode zu schreiben:Asp.net WebAPI Httpclient stark typisierten PostAync

// POST /api/citycode 
public HttpResponseMessage<CityCode> Post(CityCode citycode) 
{ 
    try 
    { 
     Test.SelfTrackingEntities.BusinessLayer.BusinessManagers.CityCodeManager myCityCodeManager = new CityCodeManager(Utility.GetConnectionString()); 
     var id = myCityCodeManager.Create(citycode); 

     var response = new HttpResponseMessage<Test.SelfTrackingEntities.BusinessLayer.BusinessEntities.CityCode>(citycode) { StatusCode = HttpStatusCode.Created }; 
     response.Headers.Location = new Uri(VirtualPathUtility.AppendTrailingSlash(Request.RequestUri.ToString()) + citycode.Name); 
     return response; 
    } 
    catch (Exception e) 
    { 
     var response = new HttpResponseMessage(HttpStatusCode.Conflict); 
     response.Content = new StringContent(e.Message); 
     throw new HttpResponseException(response); 
    } 
} 

Der Kunde Call ist:

var objectContent = CreateJsonObjectContent(citycode); 
objectContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); 
var requestMessage = new HttpRequestMessage<CityCode>(citycode, jsonMediaType); 
return httpClient.PostAsync(addressSuffix, objectContent).ContinueWith(task => 
{ 
    var responseMessage = task.Result; 
    return responseMessage.Content.ReadAsAsync<CityCode>().ContinueWith(readTask => 
    { 
     return readTask.Result; 
    }); 
}).Unwrap(); 

Aber der Server erhält nie die Rufen Sie an, ich benutze den JsonNetFormatter nicht den eingebauten Formatierer.

Antwort

4

Haben Sie den HttpClient (http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx) versucht?

Dies ist ein hervorragender HTTP-Client für den Einsatz von MVC 4 Web Api. Werfen Sie einen Blick auf diese:

 var config = new HttpConfiguration(); 
     config.Routes.MapHttpRoute("default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); 

     var server = new HttpServer(config); 
     var client = new HttpClient(server); 

     dynamic s = new ExpandoObject(); 
     s.comeValue = 1; 

     var d = JsonConvert.SerializeObject(s); 
     var content = new StringContent(d, Encoding.UTF8, "application/json"); 

     var postResult = client.PostAsync("http://localhost:29722/api/whatevercontroller", content).Result; 
Verwandte Themen