2012-05-29 15 views
5

Sto cercando di inviare a un WebAPI metodo POST Asp.Net:Asp.net WebAPI HttpClient fortemente tipizzato 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); 
    } 
} 

la chiamata del client è:

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(); 

ma il server non riceve mai la chiama, sto usando JsonNetFormatter non il formattatore integrato.

risposta

4

Avete provato HttpClient (http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx)?

Questo è un eccellente client HTTP per il consumo di MVC 4 Web Api. Date un'occhiata a questo:

 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; 
Problemi correlati