2012-05-29 20 views
5

Bir Asp.Net WebAPI Mesaj Yöntemi göndermek için çalışıyorum Yazılan:Asp.net WebAPI HttpClient Kesinlikle PostAync

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

Ama sunucu Aldı asla:

// 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); 
    } 
} 

Müşteri Çağrı olduğu çağrı, yerleşik biçimlendirici değil JsonNetFormatter kullanıyorum.

cevap

4

HttpClient'i (http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx) denediniz mi?

Bu, MVC 4 Web API'sini kullanmak için mükemmel bir HTTP istemcisidir. Şuna bir bakın:

 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;